javascript - 中间件被调用以进行错误处理但不处理响应
问题描述
我试图通过返回 json 来处理错误,但我的错误处理程序(在被调用时,登录控制台)不会返回我试图返回的内容。这是处理程序:
const handleError = function(err, req, res, next) {
console.log(err);
res.setHeader('Content-Type', 'application/json');
res.status(500);
res.send(JSON.stringify(error));
}
但是我得到了一个渲染函数,它转换为作为用户返回给我的以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Invalid token with reason JsonWebTokenError: jwt malformed</pre>
</body>
</html>
所以它仍然会记录错误,但除非我在我的实际函数中返回一个错误,否则它不会按预期返回,也就是以下函数确实返回一个 json 错误,如所写:
const view = function(req, res, model, settings = {}, callback) {
let { params } = req;
let { _id } = params;
let { select, limit, sort } = settings;
let query = model.findById(_id);
if (select) query.select(select);
if (sort) query.sort(sort);
if (limit) query.limit(limit);
query.exec(function(err, data) {
if(callback) {
callback(err,data);
}else{
if (err) return res.status(400).json({ 'Error': err.message });
if (!data) return res.status(404).json({ 'Error': `No document with id ${_id} found` });
return res.status(200).json(data);
}
});
}
这是我注册中间件的方法
let app = express();
app.server = http.createServer(app);
// logger
app.use(morgan('dev'));
// 3rd party middleware
app.use(cors({
exposedHeaders: config.corsHeaders
}));
// Custom error handling
app.use(api.handleError);
//Set body as json as recieved
app.use(bodyParser.json({
limit : config.bodyLimit
}));
解决方案
尝试在您的路线下方添加错误处理程序中间件。例子:
app.get('/', indexHandler)
//call next(err) in indexHandler if there is an error
app.use(errorHandler)
推荐阅读
- python - 带有 StandardScalar 和 KerasRegressors 的 make_pipeline
- java - 类型 JdbcDaoSupport 无法解析。它是从所需的 .class 文件错误中间接引用的
- r - 在 graphics::par(new = TRUE) 中:调用 par(new=TRUE) 没有绘图
- rancher - Rancher - AWS,RKE 提供默认后端 - 404 错误
- sql - 我可以链接我只有读取权限的服务器吗?
- linux - Getopts 选项仅在执行函数时回显
- c# - Groupby 在 Azure Function 版本 2 中本地评估 Entity Framework Core 2.1.4
- python-3.x - 在 Python 中计算加起来为特定值的数字对
- html - 尝试使用我的父类 firstRow 来定位子元素
- node.js - 收到错误:错误:发送后无法设置标头