gpt4 book ai didi

node.js - 两个nodejs服务器上的Access-Control-Allow-Origin错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:43 25 4
gpt4 key购买 nike

我在从由 NodeJs 服务器生成的页面到由 Socket.IO 监听的另一个 NodeJs 服务器的套接字 IO 连接上遇到问题

这个想法包含 2 个任务: 通过一台 Express 服务器生成 HTML 模板 通过另一个express服务器支持socket io

这是 server.js 代码:

const app = require('express');
const util = require('util');
const http = require('http');
const fs = require('fs');
const debug = console.log;
const moment = require('moment');
const event = require('events').EventEmitter;
var server = app();
server.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
}
);
server.use(app.json());
server.use(app.urlencoded());
server.use(app.logger());
server.use(app.favicon());
server.use(app.static(__dirname + '/core'));
server.get('*', function (req, res, next) {
debug('Connection refused: \t' + req.url);
var r = (e.url.split('/')[2] == 'socket.io.js') ? server.st.socket : server.st.tmp; // Return TMP-HTML FILE OR SOCKET.IO JS FILE FOR CLIENT
res.send(r);
res.end();
});
server.st = {
socket: fs.readFileSync('./socket.io.js', 'utf-8')
tmp: fs.readFileSync('./tmp.html', 'utf-8')
}
server.listen(81);
*******************************************************************************
//Creating SOCKET server
io = require('socket.io').listen(82);
io.configure(function () {
io.set('log level', 1);
io.set('origin', '*');
});
io.sockets.on('connection', function (socket) {
debug('IT IS WORK')
})

这是 tmp.html 代码:

<!DOCTYPE html>
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:82');
</script>
</head>
<body>
</body>

客户端默认使用 Socket.io.js

这是客户端错误

XMLHttpRequest cannot load http://localhost:82/socket.io/?EIO=2&transport=polling. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:81' is therefore not allowed access. 

这个*有什么问题吗?

最佳答案

答案是:

必须支持套接字的 HTTP 服务器,在库存套接字选项中有默认的原始设置,不能通过 778 行(v0.9)中的 var IO configurate、manager.js 更改,您必须在原始选项中编写如下内容: headers['Access-Control-Allow-Origin'] = '*';或

最好的解决办法是:

HTTP 服务器必须支持套接字,已将地址与其自己的监听器绑定(bind),该服务器使用我从 localhost:81 获取的 socket.io.js 文件创建请求此隧道的套接字客户端。这就是为什么我问自己:“为什么我从服务器获取与套接字服务器无关的套接字客户端文件?”并改变了

<script src="http://localhost:82/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:82');
</script>

而且它有效。谢谢,来自俄罗斯的厚爱。再见。

关于node.js - 两个nodejs服务器上的Access-Control-Allow-Origin错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com