Express.js关机挂钩

45
在Express.js中,是否有一种设置回调函数在应用关闭时执行的方法?

2
以下答案在日常活动中没有用处,您需要查找 此链接 - process.on('SIGINT', () => { ...}) - mattyb
4个回答

45
你可以使用 node.js 的核心过程 "exit" 事件来实现,代码如下:

You could use the node.js core process 'exit' event like so:

process.on('exit', function() {
  // Add shutdown logic here.
});

当然,在 exit 函数返回后,主事件循环将停止运行,因此您无法从该函数内部安排任何计时器或回调(例如,任何 I/O 必须是同步的)。


1
我可以在那里使用 async function() 吗? - Hendy Irawan
1
@HendyIrawan 是的,你可以使用 async - emc
1
@emc这是错误的!你不能在“exit”处理程序中使用异步代码。请参见此处:https://nodejs.org/api/process.html#process_event_exit,“侦听器函数必须仅执行同步操作”。 到目前为止,我发现处理每个信号事件是处理任何可能原因退出的最佳替代方法,如此答案所述:https://dev59.com/6lkR5IYBdhLWcg3w9Rut#40574758。 - Alexey Grinko

11

2

很多选项,这很棒。 - quickshiftin

1
如果你需要访问当前范围内的内容,你可以像这个答案中那样使用 `bind()`:https://dev59.com/z2Yr5IYBdhLWcg3wAFg0#14032965,但你可能想要绑定 `this`。
function exitHandler(options, err) {
    if (options.cleanup) console.log('clean');
    if (err) console.log(err.stack);
    if (options.exit) process.exit();
}

process.on('exit', exitHandler.bind(null,{cleanup:true}));

或者使用箭头函数。它的作用域是在声明它的地方。 const exitHandler = (options, err) => {...} - Eric Haynes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接