2015-08-18 31 views
1

我試圖連接到mysql數據庫,運行一個查詢,然後設置一個cookie只有當密碼是正確的(我知道我不應該使用md5,這只是一個測試項目)。這是我寫的代碼,當我執行,讓這個請求的請求時,它說:Error: Can't set headers after they are sent.res.cookie()沒有與mysql連接後

但我未發送任何迴應,直到我打電話res.cookie()我不知道什麼是錯的更多信息:

email=req.params.email; 
    password=req.params.password; 
    var connection = mysql.createConnection({ 
     host  : 'localhost', 
     user  : 'root', 
     password : 'nishchal11', 
     database : 'venturesity' 
    }); 

    connection.connect(); 
    sql="SELECT * FROM user WHERE user_email="+connection.escape(email)+" AND password=md5("+connection.escape(password)+");"; 

    connection.query(sql,function (err,rows,fields) { 
     res.cookie("email",email); 
     if(!err){ 
      if(rows.length==1){ 
       //res.cookie("password",rows[0].pass); 
       console.log(rows[0].pass); 
      }else{ 
       console.log("wrong pass"); 
      } 
     }else{ 
      console.log("Error"); 
     } 
    }); 
    res.end(sql); 

在先進的感謝

+1

是否有一些較早執行的代碼發送內容?您還需要在查詢中的字符串值周圍放置字符串分隔符(即單引號),您真的應該考慮關閉SQL注入漏洞。你已經注意到你的密碼哈希方法不健全 - 你對此是正確的。 –

+0

connection.escape轉義sql注入,我現在不擔心,因爲正如我所提到的,這只是一個測試階段。 –

回答

2

你結束響應早期(res.end(sql)),被執行查詢之前(查詢是異步)。刪除它,而是在查詢回調中結束響應,並且錯誤應該消失。

+0

非常感謝,我知道,多麼愚蠢的錯誤:D –