gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:56 24 4
gpt4 key购买 nike

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

最佳答案

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

关于node.js - 如何在发送响应后停止nodejs ajax请求代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26814993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com