Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту при попытке проверки и вставки с помощью knex - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь проверить форму ввода с Джои, а затем выполнить вставку.Я подумал, что сначала нужно получить данные, а затем проверить, прежде чем вставлять в БД.

Перед вставкой я решил console.log результата, но получил эту ошибку.

Также кто-то может предложитьпакет для безопасности.Я слышал о шлеме, но я не знаю, как применить к моему коду.Может кто-нибудь показать мне

[Объект: нулевой прототип] {имя книги: 'dswdgefg', сводка: 'dstsdtgdrtfy \ r \ n', isbn: '234325435', выберите: 'Фрукты'} [Объект: нулевой прототип] {bookname: 'dswdgefg',
сводка: 'dstsdtgdrtfy \ r \ n', isbn: '234325435',
select: 'Fruits'} POST / addbooks 200 23,899 мс - ошибка 16 [ERR_HTTP_HEADERS_SENT]: Невозможно установить заголовки после того, как они отправлены клиенту в ServerResponse.setHeader (_http_outgoing.js: 482: 11) в ServerResponse.header (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \response.js: 767: 10) в ServerResponse.send (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ response.js: 170: 12) в состоянии готовности (C: \ Users \ dokunbam \Documents \ Node \ crudlist \ node_modules \ express \ lib \ response.js: 1004: 10) в tryHandleCache (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ ejs \ lib \ ejs.js: 257: 5)в View.exports.renderFile [как движок] (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ ejs \ lib \ ejs.js: 480: 10)в View.render (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ view.js: 135: 8) в tryRender (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \express \ lib \ application.js: 640: 10) в Function.render (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ application.js: 592: 3) в ServerResponse.render (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ response.js: 1008: 7) в C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ app.js: 41: 7 на уровне.handle_error (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ router \ layer.js: 71: 5) в trim_prefix (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express\ lib \ router \ index.js: 315: 13) в C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ router \ index.js: 284: 7 в Function.process_params (C: \Пользователи \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ router \ index.js: 335: 12) на следующем (C: \ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ router \индекс.js: 275: 10)

Это мой код

exports.addbooks = function (req, res)
{
    const bookname = req.body.bookname;
    const summaries = req.body.summaries;
    const isbn = req.body.isbn;
    const category = req.body.select;

    const schema = Joi.object().keys({
        bookname: Joi.string().trim().min(6).max(25).required(),
        summaries: Joi.string().trim().required(),
        isbn: Joi.number().required(),
        category: Joi.string().trim().required()

    });
    Joi.validate(req.body, schema, (err, result) => {
        if(err){
            console.log(result)
            res.send('an error occured');
        }
        console.log(result)
        //Perform knex insert into db
        res.send("successfully added");

    })

}

Спасибо

1 Ответ

0 голосов
/ 19 января 2019

При ошибке вы сначала отправляете an error occured, а затем снова отправляете successfully added. Вы не можете этого сделать, вы можете отправить ответ клиенту только один раз.

Вам необходимо остановить выполнение кода после отправки сообщения об ошибке.

Joi.validate(req.body, schema, (err, result) => {
    if(err){
        console.log(result)
        return res.send('an error occured');
    }
    console.log(result)
    //Perform knex insert into db
    res.send("successfully added");

})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...