javascript - 捕获错误,但未退出应用程序 - NodeJS
问题描述
我是 NodeJS 的新手。我试着
- 捕获导致错误的坏情况
- 当我抓住它时,我想在我的控制台中抛出一个错误
- 阻止进一步的代码执行
- 防止应用崩溃
#1
我试过了
process.exit
我让我不想退出的应用程序
[nodemon] clean exit - waiting for changes before restart
#2
我也试了
process.abort
我让应用程序崩溃,这是我不想要的。
[nodemon] app crashed - waiting for file changes before starting...
#3
我也试了
uncaughtException
if(serviceType == 0 || serviceType == '' || serviceType == null) {
console.error('\x1b[41m%s\x1b[0m', 'bad service type detected');
process.on('uncaughtException', function (err) {
console.error(JSON.parse(JSON.stringify(body)));
});
}
我让控制台打印,但代码仍然继续运行,这是我不想要的
#4
我也试过
throw new Error
if(serviceType == 0 || serviceType == '' || serviceType == null) {
console.error('\x1b[41m%s\x1b[0m', 'bad service type detected');
throw new Error(serviceType);
}
我让控制台打印,我让代码停止,但我在控制台中遇到了大错误
2018-05-30T17:45:37.307Z - info: The server is listening on port 3333
bad service type detected
{ mac: '102030405060' }
Error: 1
at Promise (/Users/john/Sites/app/server/factories/policy-factory.js:23:27)
at Promise._execute (/Users/john/Sites/app/node_modules/bluebird/js/release/debuggability.js:303:9)
at Promise._resolveFromExecutor (/Users/john/Sites/app/node_modules/bluebird/js/release/promise.js:483:18)
at new Promise (/Users/john/Sites/app/node_modules/bluebird/js/release/promise.js:79:10)
at Object.policyFactory.create (/Users/john/Sites/app/server/factories/policy-factory.js:13:16)
at fortinet.createPolicy (/Users/john/Sites/app/server/controllers/fortinet.js:44:47)
at Layer.handle [as handle_request] (/Users/john/Sites/app/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/john/Sites/app/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/john/Sites/app/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/john/Sites/app/node_modules/express/lib/router/layer.js:95:5)
at /Users/john/Sites/app/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/Users/john/Sites/app/node_modules/express/lib/router/index.js:335:12)
at next (/Users/john/Sites/app/node_modules/express/lib/router/index.js:275:10)
at urlencodedParser (/Users/john/Sites/app/node_modules/body-parser/lib/types/urlencoded.js:82:7)
at Layer.handle [as handle_request] (/Users/john/Sites/app/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/Users/john/Sites/app/node_modules/express/lib/router/index.js:317:13)
at /Users/john/Sites/app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/Users/john/Sites/app/node_modules/express/lib/router/index.js:335:12)
at next (/Users/john/Sites/app/node_modules/express/lib/router/index.js:275:10)
at /Users/john/Sites/app/node_modules/body-parser/lib/read.js:130:5
at invokeCallback (/Users/john/Sites/app/node_modules/raw-body/index.js:224:16)
at done (/Users/john/Sites/app/node_modules/raw-body/index.js:213:7)
2018-05-30T17:45:46.817Z - error: POST /eventserver/ext/vcpe - 1
2018-05-30T17:45:46.818Z - debug: {"body":{"mac":"102030405060"}}
2018-05-30T17:45:46.818Z - verbose: {"token":""}
#5
我也试了
return;
if(serviceType == 0 || serviceType == '' || serviceType == null) {
console.error('\x1b[41m%s\x1b[0m', 'bad service type detected');
return;
}
我让应用程序不会崩溃,并让代码停止它们所在的位置。
但是我的请求过程似乎挂了这么久。
我不确定这是否是最好的方法,但到目前为止,这种方法似乎实现了我想要做的很多事情。
问题
一个人将如何去实现这样的目标?
我现在愿意接受任何建议。
解决方案
如果您使用的是 Expressjs,您可以按照 Expressjs 网站中的建议定义错误处理中间件。由于最常用的 Node 框架是 express,我希望这可能会有所帮助。
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
这将捕获服务器端错误并发送消息而不会导致应用程序崩溃。官方链接https://expressjs.com/en/guide/error-handling.html
推荐阅读
- c - 运行时检查失败 #2 - 变量“arr”周围的堆栈已损坏。发生了
- javascript - 在调用当前函数回调之前执行下一步
- r - 变异改变整列而不是逐行
- redis - redis中的内部连接
- amazon-web-services - 如何为 ELB 使用 vpc 端点?
- c# - c#:打印空protobuf消息的所有字段
- java - 在 solr 核心初始化时打开新搜索器时出错
- r - xts 对象上的 Spotvol 计算在设置错误中不断产生 POSIX 和错误
- android - 我的页面中带有背景图片的可点击文本
- sql - 如何使用 Oracle 11g 中的 XMLAGG 函数序列化树数据而不是重复的 XML 标记,嵌套结构?