簡體   English   中英

socket.io&express:找不到404

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM