【问题标题】:process.exit() not exiting process from within express .close callback, only with nodemonprocess.exit() 不会从 express .close 回调中退出进程,仅使用 nodemon
【发布时间】:2022-01-11 02:36:56
【问题描述】:

我正在尝试为 expressjs 服务器创建一些设置和拆卸逻辑。这是我的入口代码:

import fs from "fs";
import express from "express";
import { setRoutes } from "./routes";

let app = express();

const server = app.listen(8080, function () {
  console.log(`???? Mock Server is now running on port : ${8080}`);
});

app = setRoutes(app);

function stop() {
  fs.rmdirSync("./uploads", { recursive: true });
  fs.mkdirSync("uploads");
  console.log("\n???? Uploads folder purged");

  server.on("close", function () {
    console.log("⬇  Shutting down server");
    process.exit();
  });

  server.close();
}

process.on("SIGINT", stop);

// Purge sw images on restart
process.once("SIGUSR2", function () {
  fs.rmdirSync("./uploads/swimages", { recursive: true });
  console.log("???? Software Images folder purged");
  process.kill(process.pid, "SIGUSR2");
});

启动它的 npm 脚本是 "start": "FORCE_COLOR=3 nodemon index.js --exec babel-node"。

设置和重启逻辑按预期工作。我在启动时将???? Mock Server is now running on port : 8080 登录到控制台。当我保存文件时,nodemon 重新启动服务器,并执行process.once 中的代码。当我想将其全部关闭时,我在终端中ctrl + c。运行stop 函数内的清理逻辑。但是,进程会完全退出。在终端中,我仍然卡在进程中,我必须再次点击ctrl + c 才能完全退出进程。它看起来像这样:

据我所知没有打开的连接(其他问题提到如果keep-alive连接仍然打开,服务器将无法正常关闭,但据我所知,情况并非如此) .我尝试了server.close(callback)、server.on('close', callback)、process.exit()、process.kill(process.pid) 等的不同变体,但似乎没有什么可以完全退出该过程。

请注意,如果我只是运行node index.js,我没有这个问题。清理逻辑运行,进程退出完成,没有问题。仅使用 nodemon 似乎是个问题。

我不希望其他开发人员必须等待清理逻辑运行然后再次按 ctrl + c。我缺少什么来运行我的清理逻辑并在终端中完全退出进程?

【问题讨论】:

    标签: node.js express process nodemon graceful-shutdown


    【解决方案1】:

    肯定有一个打开的连接。检查这个包,可以告诉你是哪一个:https://www.npmjs.com/package/wtfnode

    【讨论】:

    • 这是一个非常有趣的包,它告诉我在尝试关闭服务器时我对WatchJS 的使用是一个打开的连接。但我很难相信这是我真正的问题。如果我只是从终端执行node index.js,ctrl + c 会按预期正确关闭所有内容。但是使用 nodemon,我得到了描述的问题。为什么 nodemon 会发生这种情况?
    猜你喜欢
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    相关资源
    最近更新 更多