将 socket.io 添加到 express 应用程序时获取 'port already in use error' - 在我尝试的任何端口上都会发生

Getting 'port already in use error' when adding socket.io to express app - happens on any port I try

如标题所述,我在尝试将 socket.io 添加到现有的 Express 应用程序时得到 'address already in use error'。

它发生在每个端口上所以我唯一能想到的就是它试图设置端口 8000 两次。但是,我不知道在哪里。

这是控制台中的错误。

这是我的 config.js

module.exports = {
PORT: process.env.PORT || 8000,
NODE_ENV: process.env.NODE_ENV || 'development',
DATABASE_URL: process.env.DATABASE_URL || 'postgresql://postgres@localhost/quik'
}

.env

NODE_ENV=development
PORT=8000

这是我的主要快递应用程序。我试过从 process.env 设置端口并直接使用 '8000'。

require('dotenv').config()
const morgan = require('morgan')
const cors = require('cors')
const helmet = require('helmet')
const { NODE_ENV } = require('./config')
const userRouter = require('./user/user_router')
const pinsRouter = require('./pins/pins_router')
const chatRouter = require('./chat/chat_router')
const config = require('./config')

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
socket.on('chat message', function(msg){
io.emit('chat message', msg);
});
});

http.listen(config.PORT, function(){
  console.log('listening on *:8000');
});



const morganOption = (NODE_ENV === 'production')
  ? 'tiny'
  : 'common';

app.use(morgan(morganOption))
app.use(helmet())
app.use(cors())

app.use('/user_route', userRouter)
app.use('/pins_route', pinsRouter)
app.use('/chat_route', chatRouter)

app.get('/', (req, res) => {
    res.send('Hello, world!')
 })

app.use(function errorHandler(error, req, res, next) {
    let response
        if (NODE_ENV === 'production') {
            response = { error: { message: 'server error' } }
        } else {
            console.error(error)
            response = { message: error.message, error }
        }
    res.status(500).json(response)
    })

module.exports = app

错误中的堆栈跟踪显示您正在某处调用 app.listen()(可能来自您的 server.js - 第 13 行)。您需要找到该代码并将其删除。您只想尝试启动同一个服务器一次,而您的 http.listen() 已经启动了一次。