Проверка формы 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>{&quot;status&quot;:400,&quot;statusText&quot;:&quot;Bad Request&quot;,&quot;errors&quot;:[{&quot;field&quot;:[&quot;emailOrUsername&quot;],&quot;location&quot;:&quot;body&quot;,&quot;messages&quot;:[&quot;\&quot;emailOrUsername\&quot; is not allowed to be empty&quot;],&quot;types&quot;:[&quot;any.empty&quot;]},{&quot;field&quot;:[&quot;password&quot;],&quot;location&quot;:&quot;body&quot;,&quot;messages&quot;:[&quot;\&quot;password\&quot; is not allowed to be empty&quot;],&quot;types&quot;:[&quot;any.empty&quot;]}]}</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блокировать

Другие вопросы по тегам