2014-11-08 78 views
1

我正在Nodejs中實現一個簡單的用戶註冊表單。我正在使用Express框架,Mongodb和Monk。我成功地實現了正常的數據庫插入。但現在,當我添加代碼來首先檢查輸入的電子郵件或用戶名是否存在時,它已經不存在了。問題是,當發現有相同電子郵件或用戶名的條目時,我使用res.end發送錯誤響應,但代碼不會停在那裏並繼續執行其他條件,並最終插入文檔而不考慮條件,有時會給出錯誤can't set headers after they are sent。下面是我對ajaxsignup航線代碼如何在發送迴應後停止nodejs ajax請求代碼

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 

回答

0

不能設置頭,他們被送到這個錯誤之後,因爲你寫res.end三個時間 有幾種方法可以做到這一點

1)使蒙戈電子郵件和用戶名和獨特當您嘗試插入一個已經存在則返回錯誤的電子郵件或用戶名

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