[英]socket.io & express: 404 not found
我的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的server
值。 而且,如果要從app.js在服務器中使用require()
,還需要從app.js導出它(否則我的代碼看不到)。
作為參考, app.listen()
的代碼執行以下操作:
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
您可以看到它如何創建與傳遞給socket.io的服務器不同的服務器。 因此,您傳遞給socket.io的那個永遠不會啟動,因此socket.io無法工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.