Node Error : Cannot set headers after they are sent to the client

7450 ワード

リクエスト時にこのような問題が発生したのは、ブラウザが1回リクエストした後、サーバが2回以上の応答を返すからに違いない.
このような状況はコールバックに現れやすく、例えば私のコード:
//        
function insert(res,req,name,psw,nick){
    //    
    var user =  new userSchema({
        username : name,
        userpsw : psw,
        nickname : nick,
        logindate : new Date()
    });
    user.save(function(err,response){
        if(err){
            req.flash('error','    ,     ');
            res.redirect('/signup');
        }
        else {
            req.flash('success','    ');
            res.redirect('/login');  //     
        }
    });
}

このinsert関数は、次のコールバックで呼び出され、サーバが2回返され、エラーが発生しました.
userSchema.find(updatestr, function(err,obj) {
if (err) {
    return req.flash('error',err);
} else {
    if (obj.length == 0) {   
        //      ,     
        insert(res,req,UserName,newPas,email);  //   
        req.flash('success','    ');
        res.redirect('/login');   //      
    } else if (obj.length != 0) {
        req.flash('error','      ');
        res.redirect('/signup');
    }
}
});

ここではやはり同じリダイレクトを2回書いたことに気づかなかったので、2回返しが異なる操作であればこのようなバグを無視しやすいかもしれません.