我正在使用ExpressJS框架来创建REST API。所有API都应该只接受POST,PUT和PATCH类型的请求方法的JSON请求体。
我正在使用express.bodyParser模块来解析JSON主体。它完美无缺。
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
如果我的JSON主体中存在任何语法错误,我的上一个错误处理程序中间件就完全被调用,我可以将响应自定义为400 Bad Request
。
但是,如果我传递内容类型而不是像application/json
这样的(text/plain,text/xml,application/xml)
,那么正文解析器模块会在没有错误的情况下解析它,并且在这种情况下不会调用我的错误处理程序中间件。
我的上一个错误处理程序中间件:
export default function(error, request, response, next) {
if(error.name == 'SyntaxError') {
response.status(400);
response.json({
status: 400,
message: "Bad Request!"
});
}
next();
}
我想要做的是在内容类型不是applicaition/json
的情况下调用我的上一个错误处理程序。
答案 0 :(得分:8)
要执行此操作,您只需使用bodyparser.json
configuration options
type
选项即可
app.use(bodyParser.json({
type: function() {
return true;
}
}));
替代方案可以使用通配符
app.use(bodyParser.json({
type: "*/*"
}));