问答

process.uncaughtException如何在express中使用

作者:admin 2021-06-22 我要评论

代码很简单, app.js const express = require('express')const app = express()const port = 3001app.get('/', (req, res) = { console.log(c); res.send('dddd...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

代码很简单, 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)
###

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...

###

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • process.uncaughtException如何在expre

    process.uncaughtException如何在expre

  • vue使用MQTT.js遗嘱失效问题

    vue使用MQTT.js遗嘱失效问题

  • 在eclipse中用jetty启动后访问接口报No

    在eclipse中用jetty启动后访问接口报No

  • .net core AddNewtonsoftJson,两位小

    .net core AddNewtonsoftJson,两位小

腾讯云代理商
海外云服务器