Lỗi: Can't set headers after they are sent.



  • Mình có một đoạn code dạng như sau:

    app.get("/test/:user", function(req, res) {
    var user = req.params.user;
    var sql = "SELECT * FROM test_user WHERE user = ?";
        conn.query(sql, [user], function(err, result) {
            if(err) throw err;
            if(result.length > 0) {
                if(result[0].level != 3) {
                    req.flash("message", "Tài khoản không đủ level");
                    return res.redirect("/");
                }
            }
            else {
                //...
            }
        });
        //...
        req.flash("message", "success");
        return res.redirect("/main");
    });
    

    Nó lại báo lỗi khi chạy đến đoạn if(result[0].level != 3) {

    \node_modules\mysql\lib\protocol\Parser.js:80
    throw err; // Rethrow non-MySQL errors
    ^

    Error: Can't set headers after they are sent.
    .....

    mặc dù mình đã return, ai thông não mình hộ với ạ chứ loay hoay cả buổi r :|


  • Global Moderator

    SQL query của bạn là ko đồng bộ, vậy nên bạn cần phải đợi nó thực hiện xong mới response về cho User, như code trên là bạn chưa biết là query có thực hiện hay không đã return res.redirect("/main"); về cho user rồi? Bạn đưa đoạn code vào bên trong hàm callback nhé.

    app.get("/test/:user", function(req, res) {
    var user = req.params.user;
    var sql = "SELECT * FROM test_user WHERE user = ?";
        conn.query(sql, [user], function(err, result) {
            if(err) throw err;
            if(result.length > 0) {
                if(result[0].level != 3) {
                    req.flash("message", "Tài khoản không đủ level");
                    return res.redirect("/");
                }
            }
            else {
                //...
            req.flash("message", "success");
            return res.redirect("/main");
            }
        });
        //...
    
    });
    


  • Đồng bộ và bất đồng bộ luôn khiến các JSer đau đầu :)))


Log in to reply