Проверка формы Joi.js - возвращение сообщений в формате json
Я использую экспресс-валидацию и пакеты Joi для проверки форм на стороне сервера, и когда возникает ошибка, она возвращает html-страницу в качестве ответа, возможно ли просто вернуть объект json?
Файл маршрута:
// Validator configuration
const validate = require('express-validation');
const validation = require('../validation/index');
.
.
.
router.post('/login', validate(validation.login), (req, res) => {
// Rest of code
Файл проверки логина:
const joi = require('joi');
module.exports = {
body: {
emailOrUsername: joi.string().required(),
password: joi.string().required()
}
};
и это возвращает это:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>{"status":400,"statusText":"Bad Request","errors":[{"field":["emailOrUsername"],"location":"body","messages":["\"emailOrUsername\" is not allowed to be empty"],"types":["any.empty"]},{"field":["password"],"location":"body","messages":["\"password\" is not allowed to be empty"],"types":["any.empty"]}]}</pre>
</body>
</html>
2 ответа
Решение
Да, это возможно - просто используйте простое промежуточное ПО:
app.use((err, req, res, next) => {
return res.status(err.status).json(err)
});
Проверьте документ - там написано:
обработчик ошибок требуется с 0.3.0, пример:
// error handler, required as of 0.3.0
app.use(function(err, req, res, next){
res.status(400).json(err);
});
app.use((err, req, res, next) => {
return res.status(err.status).json(err)
});
В моем случае код выше не работал. Я использовал промежуточное программное обеспечение, но оно не сработало. Наконец, это сработало, когда я поместил приведенный выше код в последнюю позицию, которая находится чуть выше
app.listen
блокировать