You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js报错:TypeError: 无法读取undefined的'close'属性求解答

解决Node.js中unhandledRejection回调里server.close()的TypeError问题

错误原因

你在unhandledRejection回调内用let server重新声明了一个局部变量,这个变量没有被赋值,默认是undefined,调用.close()自然会抛出"Cannot read properties of undefined (reading 'close')"错误。

真正的服务器实例是你启动HTTP/HTTPS服务时返回的对象(比如const server = app.listen(3000)),但你在回调里没有引用这个全局/上层作用域的实例,反而新建了一个空变量。

解决方案

1. 让server实例在回调作用域内可访问

把启动服务器时的实例变量放在全局或回调能访问的上层作用域:

// 模块级作用域声明server
let server;

// 启动服务器时赋值
server = app.listen(3000, () => {
  console.log('Server running on port 3000');
});

process.on('unhandledRejection', (err, promise) => {
    console.log(`Error: ${err.message}`.red);
    // 直接使用上层作用域的server实例
    if (server) {
        server.close(() => process.exit(1));
    } else {
        // 服务器未启动时直接退出
        process.exit(1);
    }
});

2. 增加容错处理

添加if (server)判断,避免服务器还未初始化完成就触发unhandledRejection的情况,防止二次报错。

3. 可选:处理close卡住的情况

如果server.close()因未处理连接等原因卡住,可设置超时强制退出:

process.on('unhandledRejection', (err, promise) => {
    console.log(`Error: ${err.message}`.red);
    if (server) {
        server.close(() => process.exit(1));
        // 5秒后强制退出
        setTimeout(() => process.exit(1), 5000);
    } else {
        process.exit(1);
    }
});

内容的提问来源于stack exchange,提问作者benjamin ontiveros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:45:34