Я пытаюсь обработать ошибки, возвращая 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));
}
Но мне возвращают функцию рендеринга, которая переводится в следующее, возвращаемое мне как пользователю:
<code><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Invalid token with reason JsonWebTokenError: jwt malformed
Таким образом, он по-прежнему будет регистрировать ошибку, но если я не верну ошибку в моей фактической функции, она не вернется, как задумано, иначе следующая функция возвращает ошибку 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
}));