Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 发送响应后如何停止nodejs ajax请求代码_Node.js_Mongodb_Express_Monk - Fatal编程技术网

Node.js 发送响应后如何停止nodejs ajax请求代码

Node.js 发送响应后如何停止nodejs ajax请求代码,node.js,mongodb,express,monk,Node.js,Mongodb,Express,Monk,我正在Nodejs中实现一个简单的用户注册表单。我使用的是Express框架、Mongodb和Monk。我已经成功地实现了正常的数据库插入。但现在,当我添加代码以首先检查输入的电子邮件或用户名是否存在时,它就失控了。问题是,当发现具有相同电子邮件或用户名的条目时,我使用res.end发送错误响应,但代码不会停止并继续执行其他条件,并最终插入文档而不管条件如何,有时会出现错误,即发送后无法设置标题。下面是我的Ajax注册路线代码 router.post('/ajaxsignup', functio

我正在Nodejs中实现一个简单的用户注册表单。我使用的是Express框架、Mongodb和Monk。我已经成功地实现了正常的数据库插入。但现在,当我添加代码以首先检查输入的电子邮件或用户名是否存在时,它就失控了。问题是,当发现具有相同电子邮件或用户名的条目时,我使用
res.end
发送错误响应,但代码不会停止并继续执行其他条件,并最终插入文档而不管条件如何,有时会出现错误,即
发送后无法设置标题。下面是我的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

发送头后无法设置头。此错误是因为您写入了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));
        }
    }
});