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

在请求时 ,出现这种问题,一定是因为,浏览器请求一次之后,服务器却返回两次及两次以上的响应。

这种情况容易出现在回调中,例如我的代码:

// 插入数据库函数
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函数我在下面的这个回调中调用,结果服务器返回两次,导致出错。

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');
    }
}
});

这里还是因为我没注意写了两次相同的重定向,如果两次是返回是不一样的操作的话可能容易忽略这样的bug了。

你可能感兴趣的:(Node Error : Cannot set headers after they are sent to the client)