node.js - 无法使用 Socket.io 启动 NodeJS 服务器

标签 node.js express server socket.io mern

所以,我有一个简单的梦想,用 Socket.io 库启动服务器,但由于某些原因,它没有发生...我无法理解出了什么问题,因为我什至没有收到服务器运行上的标准消息 - Server running on port ${port}

请帮忙...

'use strict'

const express = require('express');
const http = require('http');
const io = require('socket.io');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const bcrypt = require('bcrypt-nodejs');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);

const app = express();
const server = http.Server(app);
const socketServer = io(server);
const router = express.Router();

const chat = require('./routes/chat');
const profile = require('./routes/profile');
const registration = require('./routes/registration');
const login = require('./routes/login');
const logout = require('./routes/logout');

const EmployersSchemaDB = require('./SchemaDB/EmployersSchemaDB');
const MessagesSchemaDB = require('./SchemaDB/MessagesSchemaDB');
const User = require('./SchemaDB/ShemaAuthtificaion');

mongoose.connect('mongodb://test_db');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cookieParser());

app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
    res.setHeader('Access-Control-Allow-Credentials', 'true');
    res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers');
    res.setHeader('Cache-Control', 'no-cache');
    next();
});

app.use(session({
    secret: 'work hard',
    resave: true,
    saveUninitialized: false,
    store: new MongoStore({ mongooseConnection: mongoose.connection })
}));

router.route('/')
    .get((req, res) => {
    res.json('Hello on the Homepage!');
});

app.use('/', router);
app.use('/chat', chat);
app.use('/profile', profile);
app.use('/auth/login', login);
app.use('/auth/logout', logout);
app.use('/auth/registration', registration);

const port = process.env.API_PORT || 8989;
socketServer.listen(port, () => {
    console.log(`Server running on port ${port}`);
});

最佳答案

从此更改:

socketServer.listen(port, () => {
    console.log(`Server running on port ${port}`);
});

对此:

server.listen(port, () => {
    console.log(`Server running on port ${port}`);
});

您需要启动您的 http 服务器。这是此处的核心服务器,可与 Express 和 socket.io 一起使用,并处理所有传入请求。

您的变量 socketServer 和您的 io 变量命名错误(这可能是您混淆的一部分)。 socketServer 是实际的服务器,即通常名为 io 的 socket.io 服务器端实例。请参阅the socket.io server doc了解详情。

关于node.js - 无法使用 Socket.io 启动 NodeJS 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50437473/

相关文章:

node.js - express.js 有主目录的概念吗?

c - 如何使用来自客户端的revieed消息作为C中服务器端的文件路径?

javascript - nodejs在数据库中显示一条记录而不是三条记录

node.js - 我在 Eclipse 中执行 Protractor 脚本时遇到问题

node.js - 在 Node.js 中将 csv 文件读入多维数组的具体步骤是什么?

javascript - Express 中的路由行为不符合我的预期

Node.js Net.Socket() 连接到 net.tcp Web 服务

reactjs - 如何在一台主机上部署 Strapi 和 React?

python - 将 Raspberry Pi 数据发送到远程服务器

java - 无法使用 JSoup 登录到 IIS 登录提示