【问题标题】:node-cron: I got the error: listen EADDRINUSE: address already in usenode-cron:我收到错误:监听 EADDRINUSE:地址已在使用中
【发布时间】:2020-12-28 20:34:01
【问题描述】:

我使用node-cron 定期运行程序。我运行以下代码,但我收到下面的错误消息,指出端口已在使用中。

我在 Windows 10 中从命令提示符运行 node.js 程序。一旦出现此错误,我关闭了命令提示符窗口以结束所有正在使用的连接。并再次打开窗口并再次运行节点程序。但是我遇到了同样的错误。

我应该只通过这个程序使用端口号 3128。到目前为止,该程序没有问题,因为我已多次运行它。但是今天突然开始出现这个错误。

我想知道为什么在程序结束后端口仍在使用中,并且想知道是否应该使用类似node-cron.closePort() 的代码显式关闭 node-cron 程序?

sched_exec.js

  "use strict";
    
    const cron = require("node-cron");
    const express = require("express");
    const fs = require("fs");
    const sync_module = require('./sync');
    const logwriter = require('./logWriter/logwriter');
    
    const app = express();
    
    // schedule tasks to be run on the server
    //const exec_timing = "0 2 * * *";
    const exec_timing = "* * * * *";
    cron.schedule(exec_timing, function() {
      logwriter.info("start");
      
      //do something
    });
    
    app.listen(3128);

错误:

C:\inetpub\ftpfolder\syncSchedule>node sched_exec
events.js:292
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3128
    at Server.setupListenHandle [as _listen2] (net.js:1313:16)
    at listenInCluster (net.js:1361:12)
    at Server.listen (net.js:1447:7)
    at Function.listen (C:\inetpub\ftpfolder\syncSchedule\node_modules\express\lib\application.js:618:24)
    at Object.<anonymous> (C:\inetpub\ftpfolder\syncSchedule\sched_exec.js:21:5)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (net.js:1340:8)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'EADDRINUSE',
  errno: 'EADDRINUSE',
  syscall: 'listen',
  address: '::',
  port: 3128
}

我做了 netstat -ab。它说,[node.exe] 是端口 3128 连接的所有者。但是,我不认为任何其他节点进程正在运行。

我也研究过任务管理。

它有两个 node.js 进程。但我不知道为什么。我应该在另一个帖子中问这个吗?

【问题讨论】:

    标签: node.js listen node-cron


    【解决方案1】:

    您的计算机上某个地方正在运行此程序或其他程序的另一个实例。

    EADDRINUSE 是一个操作系统错误,表明您的app.listen(3128) 行无法侦听您机器上该端口 (3128) 上的传入连接,因为其他程序已经在侦听。

    您尝试停止正在收听的程序未成功。

    您如何知道正在运行的程序是什么?当然,您可以使用任务管理器 (ctrl-shift-escape) 查看所有正在运行的程序。

    您也可以打开 cmd shell(以管理员身份)并说 netstat -ab -b 选项显示正在侦听的可执行文件。

    【讨论】:

    • 谢谢。但我知道该端口正在使用中。我的问题很糟糕,所以我添加了一些来澄清我想问的问题。
    • 谢谢。我做了netstat -ab。它说,[node.exe] 是端口 3128 连接的所有者。但是,我不认为任何其他节点进程正在运行..
    猜你喜欢
    • 2021-02-11
    • 2020-11-09
    • 2020-04-08
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多