启动sumeru 提示如下错误,Nodejs个位知道是为什么吗?

启动sumeru 提示如下错误,Nodejs个位知道是为什么吗?

C:\Documents and Settings\myproject>sumeru start NON BAE MODE WARN: Boolean && always false [null:709,24] build from :C:\Documents and Settings\myproject
WARN: Condition always false [null:709,24] to :C:\Documents and Settings\myproject\app WARN: Dropping unreachable code [null:711,24] runing [NetMessage] in server WARN: Boolean && always false [null:867,3] WARN: Boolean && always false [null:867,3] WARN: Boolean && always false [null:871,8] WARN: Boolean && always false [null:871,8] WARN: Condition always false [null:871,8] WARN: Dropping unreachable code [null:872,2] WARN: Condition always false [null:867,3] WARN: Dropping unreachable code [null:868,2] WARN: Boolean && always false [null:1431,5] WARN: Boolean && always false [null:1431,5] WARN: Boolean && always false [null:1431,5] WARN: Condition always false [null:1431,5]

SockJS v0.3.7 bound to "/socket" events.js:72 throw er; // Unhandled ‘error’ event

Error: listen EADDRINUSE at errnoException (net.js:901:11) at Server._listen2 (net.js:1039:14) at listen (net.js:1061:10) at Server.listen (net.js:1127:5) at runStub (C:\Documents and Settings\myproject\sumeru\server
run.js:484:8) at C:\Documents and Settings\myproject\sumeru\server\run.js:15 04:5 at C:\Documents and Settings\myproject\sumeru\server\DbCollect ionHandler.js:181:16 at C:\Documents and Settings\myproject\node_modules\mongodb\li b\mongodb\db.js:276:11 at process._tickCallback (node.js:415:13)

启动的时候,提示如上错误,


7 回复

根据你提供的错误信息,看起来是在尝试启动 sumeru 项目时遇到了一些问题。具体来说,错误信息主要集中在两个方面:

  1. 警告信息:这些警告表明你的代码中存在一些逻辑上的问题,比如某些条件总是为假,或者某些代码块因为之前的逻辑而变得不可达。这些通常不会阻止程序运行,但最好检查并修正这些问题。

  2. EADDRINUSE 错误:这是主要的错误,意味着你在尝试绑定到一个已经被其他进程占用的端口上。这通常发生在开发环境中,当你多次启动服务而忘记关闭之前的服务实例时。

解决方案

1. 检查警告信息

首先,检查那些警告信息所指的代码行,确保你的逻辑没有问题。例如,如果你发现某段代码中的条件判断总是为假,那么你需要审查这段代码的逻辑。

2. 解决 EADDRINUSE 错误

解决 EADDRINUSE 错误最直接的方法是找到并终止占用该端口的进程。你可以使用以下命令来查找并杀死占用端口的进程:

  • 在 Windows 上:

    netstat -ano | findstr :<port_number>
    

    这将显示占用指定端口的进程ID。然后使用任务管理器或以下命令来结束该进程:

    taskkill /PID <process_id> /F
    
  • 在 Linux 或 macOS 上:

    lsof -i :<port_number>
    

    或者

    netstat -tuln | grep <port_number>
    

    这将显示占用指定端口的进程ID。然后使用以下命令来杀死该进程:

    kill -9 <process_id>
    

示例代码:检查端口占用情况

你可以编写一个简单的 Node.js 脚本来检查端口是否被占用,并自动选择一个可用的端口:

const net = require('net');

function checkPort(port) {
  return new Promise((resolve) => {
    const server = net.createServer().listen(port)
      .once('listening', () => {
        server.close();
        resolve(true);
      })
      .once('error', (err) => {
        if (err.code === 'EADDRINUSE') {
          resolve(false);
        }
      });
  });
}

async function findAvailablePort(startPort) {
  for (let port = startPort; port <= 65535; port++) {
    if (await checkPort(port)) {
      console.log(`Port ${port} is available.`);
      return port;
    }
  }
  throw new Error('No available ports found.');
}

findAvailablePort(3000).then(port => {
  console.log(`Using port: ${port}`);
});

通过这种方式,你可以确保你的应用总是绑定到一个可用的端口上,从而避免 EADDRINUSE 错误。


端口被占用了

这个好像不是端口被占用吧, SockJS v0.3.7 bound to "/socket" events.js:72 throw er; // Unhandled ‘error’ event

Error: listen EADDRINUSE

我也遇到过 是端口被占用了

请问这个怎么解决?

改配置文件,换一个端口

从你提供的日志信息来看,问题主要出在端口被占用。具体来说,Error: listen EADDRINUSE 表明你的程序尝试绑定到一个已经被其他进程占用的端口。

解决方法:

  1. 检查端口占用情况: 可以使用命令行工具检查哪个进程占用了指定的端口。例如,在 Windows 上可以使用 netstat -ano | findstr <port> 命令来查找端口占用情况,并通过 taskkill /PID <pid> /F 杀死占用该端口的进程。

  2. 修改应用配置: 如果不想杀死占用端口的进程,可以修改你的应用配置,让它绑定到其他未被占用的端口。例如,在 sumeru 配置文件中修改监听端口的配置项。

示例代码(修改端口):

假设你的 sumeru 应用配置文件位于 sumeru/config.js 中,你可以这样修改它:

// sumeru/config.js

module.exports = {
  port: process.env.PORT || 3000,  // 修改为未被占用的端口
};

然后在启动应用时指定新的端口:

sumeru start --port 3001

总结

以上就是解决 EADDRINUSE 错误的基本思路和方法。希望这些信息对你有所帮助。

回到顶部