Невозможно установить заголовки после их отправки клиенту NodeJS - PullRequest
0 голосов
/ 26 мая 2019

Я пишу Node JS API для входа в систему. Я написал логику, но при отправке ответа я столкнулся с проблемой. Вот мой код:

app.post('/API/login', (request, response) => {
    model.findOne({ email: request.body.email }, (err, result) => {
        if (err) throw err;

        if (result) {
            bcrypt.compare(request.body.password, result.password, function (error, hash) {
                if (error) throw err;
                if (hash) {
                    request.session.logged = true;
                    request.session._id = result._id;
                    response.send(result._id);
                }
                else {
                    response.send('Incorrect Username and/or Password!');
                }
            })
        } else {
            response.send('Incorrect Username and/or Password!');
        }
        response.end();
    })
});

Однако я столкнулся с проблемой. Я продолжаю получать следующую ошибку:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:470:11)
    at ServerResponse.header (node_modules\express\lib\response.js:775:10)
    at ServerResponse.json (node_modules\express\lib\response.js:268:10)
    at ServerResponse.send node_modules\express\lib\response.js:162:21
    at login.js:73:34
    at node_modules\bcryptjs\dist\bcrypt.js:297:21
    at node_modules\bcryptjs\dist\bcrypt.js:1353:21
    at Immediate.next (node_modules\bcryptjs\dist\bcrypt.js:1233:21)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)

Я не уверен, что является причиной этой проблемы.

1 Ответ

1 голос
/ 26 мая 2019

Вы пытаетесь отправить ответ с response.end() после того, как уже ответили response.send(...)

. Вы можете удалить оператор response.end():

app.post('/API/login', (request, response) => {
  model.findOne({ email: request.body.email }, (err, result) => {
    if (err) throw err;

    if (result) {
        bcrypt.compare(request.body.password, result.password, function (error, hash) {
            if (error) throw err;
            if (hash) {
                request.session.logged = true;
                request.session._id = result._id;
                response.send(result._id);
            }
            else {
                response.send('Incorrect Username and/or Password!');
            }
        })
    } else {
        response.send('Incorrect Username and/or Password!');
    }
  })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...