process.uncaughtException如何在express中使用

发布于 2022-09-12 03:44:38 字数 1694 浏览 10 评论 0

代码很简单, app.js

const express = require('express')
const app = express()
const port = 3001

app.get('/', (req, res) => {
    console.log(c);
    res.send('dddd')
})
app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))

process.on('uncaughtException', (e)=>{  
    console.error('process error is:', e.message);  
    process.exit(1);
});
process.on('unhandledRejection', (e)=>{  
    console.error('unhandledRejection error is:', e.message);  
    process.exit(1);
});

然后本地node app.js启动server,浏览器访问http://localhost:3001/, 控制台输出如下,为什么uncaughtException那个没有得到执行啊?

$ node app.js
Example app listening at http://localhost:3001
ReferenceError: c is not defined
    at app.get (/Desktop/mine/test/app.js:7:17)
    at Layer.handle [as handle_request] (/Desktop/mine/test/node_modules/express/lib/router/layer.js:95:5)
    at next (/Desktop/mine/test/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Desktop/mine/test/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Desktop/mine/test/node_modules/express/lib/router/layer.js:95:5)
    at /Desktop/mine/test/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Desktop/mine/test/node_modules/express/lib/router/index.js:335:12)
    at next (/Desktop/mine/test/node_modules/express/lib/router/index.js:275:10)
    at expressInit (/Desktop/mine/test/node_modules/express/lib/middleware/init.js:40:5)
    at Layer.handle [as handle_request] (/Desktop/mine/test/node_modules/express/lib/router/layer.js:95:5)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤城病女 2022-09-19 03:44:38

express 内部会捕捉同步的异常/错误.
你可以在后面加一个中间件:

app.use((error, req, res, next) => {
  if (error) {
    console.error('express catched:', error.message);  
  }
});

就可以捕捉到express内部的错误了.

而异步的异常/错误, express内部是捕捉不到的. 比如:

// xxxxx
app.get('/', (req, res) => {
    setImmediate(() => {
      console.log(c);
    });
    res.send('dddd');
});
// xxxxx

这样你就能从 process.uncaughtException 中捕捉到这个错误了.

可以参考链接: https://expressjs.com/en/guid...

煮茶煮酒煮时光 2022-09-19 03:44:38

名字不就说明问题了吗
未捕获的异常
未处理的rejection(不好翻译)
你用Promise.reject(1)或者(async function () {throw '1'})()看看

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文