[英]How to stop nodejs ajax request code after sending response
我正在Nodejs中實現一個簡單的用戶注冊表單。 我正在使用Express框架,Mongodb和Monk。 我已經成功實現了普通數據庫插入。 但是現在,當我添加代碼以首先檢查輸入的電子郵件或用戶名是否存在時,它已經一團糟。 問題是,當找到具有相同電子郵件地址或用戶名的條目時,我使用res.end
發送錯誤響應,但是代碼並沒有在那里停止並繼續執行其他條件,最終無論條件和條件如何插入文檔有時給出的錯誤can't set headers after they are sent
。 下面是我的ajaxsignup路由代碼
router.post('/ajaxsignup', function(req, res){
var db = req.db;
var formdata = req.body;
var collection = db.get('userscollection');
res.setHeader('Content-Type', 'application/json');
var emailExists = collection.findOne({"email": formdata.email}, function(err, doc){
if(err)
{
response = {'status': 0, 'err_code': err.code, 'err_msg': err.err};
res.end(JSON.stringify(response));
}
else
{
if(doc)
{
response = {'status': 0, 'err_code': 0, 'err_msg': 'This email id is already registered. Please use a different one.'};
res.end(JSON.stringify(response));
}
}
});//emailExists
var usernameExists = collection.findOne({"username": formdata.username}, function(err, doc){
if(err)
{
response = {'status': 0, 'err_code': err.code, 'err_msg': err.err};
res.end(JSON.stringify(response));
}
else
{
if(doc)
{
response = {'status': 0, 'err_code': 0, 'err_msg': 'This username is already in use. Please use a different one.'};
res.end(JSON.stringify(response));
}
}
});//usernameExists
formdata.created = new Date();
formdata.last_updated = formdata.created;
collection.insert( formdata, function(err, doc){
if(err)
{
response = {'status': 0, 'err_code': err.code, 'err_msg': err.err};
}
else
{
response = {'status': 1, 'msg': 'Thank you. You can proceed to login now.'};
}
res.end(JSON.stringify(response));
});//insert
});//ajaxsignup
發送標頭后無法設置標頭,此錯誤是因為您寫了res.end三次,有幾種方法可以執行此操作
1)使mongo電子郵件和用戶名唯一,當您嘗試插入已經存在的電子郵件或用戶名時,它將返回錯誤
new Schema{
email:{type:String,index: { unique: true },required:true}
username:{type:String,index: { unique: true },required:true}
}
collection.insert(formdata,function(err,data){
if(err){
res.json({success:false,text:"User with this email or username already exists!"});
}
else{
res.json({success:true,text:"Your registration was successfull"});
}
})
2)第二就是你的方式
var emailExists=false,usernameExists=false;
collection.findOne({"$or":[{"email": formdata.email},{"username":formdata.username}], function(err, doc){
if(err)
{
response = {'status': 0, 'err_code': err.code, 'err_msg': err.err};
res.end(JSON.stringify(response));
}
else
{
if(!doc)
{
collection.insert( formdata, function(err, doc){
if(err)
{
response = {'status': 0, 'err_code': err.code, 'err_msg': err.err};
}
else
{
response = {'status': 1, 'msg': 'Thank you. You can proceed to login now.'};
}
res.end(JSON.stringify(response));
});//insert
});
}else{
response = {'status': 0, 'err_code': 0, 'err_msg': 'This email id is already registered. Please use a different one.'};
res.end(JSON.stringify(response));
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.