Express全局的错误处理
一般错误处理
app.use((err, req, res, next) => {
const statusCode = err.statusCode || 500;
console.error(new Date().toLocaleString(), req.originalUrl, statusCode, err.message, err.stack);
return res.status(statusCode).json({ 'message': err.message });
});
UnhandledPromiseRejectionWarning 异常处理
- 安装组件
npm i express-async-errors
- 修改index.js文件
const express = require('express')
require('express-async-errors');
//在app.listen(server.port之前添加上面的全局错误处理
以下代码是无法通过上面方式进行捕获的
原代码
const request = require('request');
exports.testerror = async (req, res) => {
let testPromise = test(req, res, "https://baidu.com")
let headers;
headers = await testPromise;
res.status(200).send(headers);
}
function test (req, res, url) {
const options = {
'method': 'GET',
'url': url
};
return new Promise((resolve, reject) => {
request(options, function (error, response) {
if (error) {
reject(error);
} else {
// 此处cookies为undefined
let cookies = response.headers['FSDFSFSS'];
let cookieHeaders = []
// 这儿将报异常
cookies.forEach(cookie => {
console.log("cookie: ", cookie);
cookieHeaders.push(cookie.split(';')[0])
})
resolve(cookieHeaders);
}
})
})
}
无赖我只能将request的回调函数中的逻辑提至返回结果后,详细看下面代码
修改后代码
exports.testerror = async (req, res) => {
let testPromise = test(req, res, "https://baidu.com")
let headers;
headers = await testPromise;
// ***************被移动的代码**************************
console.log("cookie: ", headers);
let cookies = headers['FSDFSFSS'];
let cookieHeader = []
cookies.forEach(cookie => {
console.log("cookie: ", cookie);
cookieHeaders.push(cookie.split(';')[0])
})
// ***************被移动的代码**************************
res.status(200).send(cookieHeader);
}
function test (req, res, url) {
const options = {
'method': 'GET',
'url': url
};
return new Promise((resolve, reject) => {
request(options, function (error, response) {
if (error) {
reject(error);
} else {
resolve(response.headers);
}
})
})
}
这种方法虽不是最好,但解决了我的问题,不知名位是否有更好的解决方法