在 node.js 中发送后无法设置 headers

can't set headers after they are sent in node.js

我正在尝试在成功登录后重定向到 Homepage.html。但我收到错误消息,页面未显示。我知道这可能是由于发送了 2 个回复或类似的原因。我已经在 Whosebug 上发布了这个问题,但没有得到任何 answer.I 如果有人能帮助我,我真的很感激 :)

我也使用了 return response.redirect('/home');,正如其中一个答案中所述,但仍然没有任何效果。

在主路径中,我有一个 console.log,它可以工作,但文件没有显示。所以我猜代码正在重定向到 /home 但没有打开文件。

当我使用 console.log(response.headersSent); 时,它显示 false。

app.post('/auth', function(request, response) {
    var number = request.body.number;
    var password = request.body.pwd;

     if (number && password) {
    var sql = `SELECT 
            fyp_helpers.Mobile_number AS number,
            fyp_helpers.Password AS  Password
        FROM fyp_helpers 
        WHERE Mobile_number = ? 
    UNION 
        SELECT 
            fyp_employers.Employer_Contact AS number ,
            fyp_employers.Employer_Password AS Employer_Password
        FROM fyp_employers 
        WHERE Employer_Contact = ?`;
    connection.query(sql, [number, number], function (error, results, fields) {
        if (results.length > 0) {
            var hashedPassword = results[0].Password;
            bcrypt.compare(password, hashedPassword, function (cryptErr, cryptResult) {
                if (cryptResult) {
                    request.session.loggedin = true;
                    request.session.number = number;
                    return response.redirect('/home');
                } else {
                    response.send('Incorrect Password!');
                    console.log(cryptErr);
                }
               
            });
        } else {
            response.send('User not registered');
        }
    });
}
        else {
        response.send('Please enter Username and Password!');
        response.end();
    }

});


app.get('/home', function(request, response) {
    if (request.session.loggedin) {
       console.log('I am home'); 
         response.sendFile(path.join(__dirname + '/HomePage.html'));
    } else {
        response.send('Please login to view this page!');
    }
    response.end();
});
app.listen(3000);

这里是错误。

您不是在等待回调函数。您应该为 connection.query 使用承诺,并使用 async 到 return.

显式等待它

相关问题可以找到很好的答案