«Невозможно установить заголовок после отправки» Node.js - PullRequest
0 голосов
/ 11 сентября 2018
C:\Users\jsj10\node_modules\mysql\lib\protocol\Parser.js:80
    throw err; // Rethrow non-MySQL errors
    ^

Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:491:11)
at ServerResponse.setHeader (_http_outgoing.js:498:3)
at ServerResponse.header (C:\Users\jsj10\node_modules\express\lib\response.js:767:10)
at ServerResponse.append (C:\Users\jsj10\node_modules\express\lib\response.js:728:15)
at ServerResponse.res.cookie (C:\Users\jsj10\node_modules\express\lib\response.js:853:8)
at ServerResponse.clearCookie (C:\Users\jsj10\node_modules\express\lib\response.js:800:15)
at Query.<anonymous> (C:\Users\jsj10\Desktop\TravelA\server.js:177:18)
at Query.<anonymous> (C:\Users\jsj10\node_modules\mysql\lib\Connection.js:502:10)
at Query._callback (C:\Users\jsj10\node_modules\mysql\lib\Connection.js:468:16)
at Query.Sequence.end (C:\Users\jsj10\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24)
Program node server.js exited with code 1

Это моя ошибка.Я не могу найти в чем проблема, хотя я посмотрел так много вопросов.Пожалуйста, помогите мне в чем проблема.Я думаю, что весь мой код совсем не неправильный.Скажи мне, где я должен исправить.Вниз мой код.

app.post('/writing_server',function(req,res){
var title = req.body.writing_title;
var author = req.body.author;
var contents = req.body.contents;
var user_id = req.body.user_id;
var sql = "insert into "+before_page+"(title,author,content,user_id) values(?,?,?,?)";
if(user_info.id != 'admin' && author.toLowerCase() === 'admin'){
    write_message = "You can't use admin NickName!";
    res.redirect('/write?before='+before_page);
} 
else {
    conn.query(sql,[title,author,contents,user_info.id],function(err,rows,fields){
        if(err) console.log(err);
        else {
            res.redirect('/menu/'+before_page);
            res.clearCookie('before_page'); 
        }
    });
}
})

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

В Express параметр response (или res) обратного вызова метода маршрутизации (app.get(), app.post() и т. Д.) Имеет методы, которые отправляют данные обратно клиенту (например, * 1005).*) и методы, которые устанавливают данные заголовка перед вызовом метода, подобного res.redirect().

В вашем коде вы пытаетесь сделать это:

res.redirect('/menu/'+before_page);
res.clearCookie('before_page');

Но это должен быть другойнаоборот:

res.clearCookie('before_page');
res.redirect('/menu/'+before_page);

Метод res.clearCookie() устанавливает данные заголовка для res.redirect(), поэтому эти методы должны вызываться в следующем порядке.

0 голосов
/ 11 сентября 2018

Поместите эти две строки в следующем порядке

 res.clearCookie('before_page'); 
 res.redirect('/menu/'+before_page);

Вы можете проверить, отправляет ли операция заголовки клиенту или нет с помощью

console.log(res.headersSent)

https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies https://developer.mozilla.org/en-US/docs/Web/HTTP/Redirections

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