簡體   English   中英

發送響應后如何停止Node.js Ajax請求代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM