我的app.js
const express = require('express'),
morgan = require('morgan'),
bodyParser = require('body-parser'),
path = require('path'),
mongoose = require('mongoose'),
app = express(),
config = require('./config'),
Note = require('./models/note'),
server = require('http').createServer(app),
io = require('socket.io')(server),
socket = io.socket;
mongoose.connect('mongodb://'+config.db.host+'/'+config.db.name);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Serve static assets
app.use(express.static(path.resolve(__dirname, '..', 'build')));
app.use(function(req, res, next) {
const allowedOrigins = [
'http://127.0.0.1:8000',
'http://localhost:8000',
'http://127.0.0.1:3000',
'http://localhost:3000'];
const origin = req.headers.origin;
if(allowedOrigins.indexOf(origin) > -1){
res.setHeader('Access-Control-Allow-Origin', origin);
}
//res.header("Access-Control-Allow-Origin", "127.0.0.1 localhost");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header('Access-Control-Allow-Credentials', true);
next();
});
在上面的代码之后在处理程序中调用socket.emit().
我的index.js
'use strict';
const app = require('./app'),
// server = http.createServer(app),
PORT = process.env.PORT || 8000;
app.listen(PORT, () => {
console.log(`REST API running on ${PORT}!`);
});
控制台输出:
任何想法?谢谢
解决方法:
如果要执行此操作:
server = require('http').createServer(app),
然后,您将无法执行以下操作:
app.listen(PORT, ...);
因为app.listen()将创建一个新的不同的服务器,而socket.io将不会与该服务器关联.
相反,您需要执行以下操作:
server.listen(PORT, ...)
使用来自app.js的服务器值.而且,如果要从app.js在服务器中使用require(),还需要从app.js导出它(否则我的代码看不到).
作为参考,the code for app.listen()
执行以下操作:
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
您可以看到它如何创建与传递给socket.io的服务器不同的服务器.因此,您传递给socket.io的那个永远不会启动,因此socket.io无法工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。