gpt4 book ai didi

Javascript 运行 "out of order"

转载 作者:搜寻专家 更新时间:2023-10-31 23:54:57 25 4
gpt4 key购买 nike

我正在尝试进行简单的用户注册,但无法正确检查以创建重复用户以按我打算的顺序运行:

路线:

app.post('/user/new', user.create);

用户创建:

exports.create = function(req, res) {
var exists = DoesUserExist(req, res);
console.log(exists);
if (exists === true){
console.log("exists");
res.redirect('/user/new');
}
else{
//good to create user since it does not exist yet
CreateUser(req, res);
console.log("does not");
res.redirect('/user/new');
}
};

辅助函数:

function DoesUserExist(req, res){
var post = req.body;

mongo.connect("mongodb://localhost:27017/db", function(err, db){
if(err) { return console.dir(err); }

var collection = db.collection("users");
collection.find({username: post.username}).count( function( err, count ){
if (count > 0){
console.log(count);
return true; //already exists
}
else{
console.log(count);
return false; //does not exist
}
});
});
}


function CreateUser(req, res){
var post = req.body;

//connect to db server
mongo.connect("mongodb://localhost:27017/", function(err, db){
if(err) { return console.dir(err); }

var collection = db.collection("users");
collection.insert({username: post.username, password : post.password}, function(error, doc){});
});

return;
}

再次运行程序以查看是否可以添加重复的用户名后,我的控制台日志返回:

undefined
does not
POST /user/new 302 4ms - 74b
1

我的 mongodb 显示重复记录。该程序的流程不符合我的看法。在这种情况下我是否没有正确使用回调?我还是 javascript 的新手,想要一些建议/评论。谢谢。

最佳答案

您需要仔细阅读回调,因为 Node 编程全都与回调有关。

当您调用 DoesUserExist() 时,它会调用 mongo.connect()立即返回。 (您可以将“console.log('hi')”放在 DoesUserExist() 的末尾以验证它在您的“if count > 0”代码之前被调用。)Mongo.connect () 例程接受回调,因此它不是一个简单的同步函数。它调用该函数(作为回调)仅当查询结果准备就绪时。因此,“返回”不是从 DoesUserExist 返回,而是从您的匿名返回传递给 mongo 驱动程序的函数。

而不是“return true/false”,你需要称呼你为“res.redirect”逻辑。您可以通过获取 user.create 中的“if/then”代码并将其转换为匿名函数来执行此操作。将其传递给 DoesUserExist(),它将在“计数”回调中调用它。

当“count”回调运行并调用您的匿名函数时,它将具有:1) count 的值,以及 2) req/res 对象以进行重定向。

我可以为您编写代码,但这确实是您需要尝试并继续阅读的东西,直到您获得“啊哈”时刻来理解所有回调。

关于Javascript 运行 "out of order",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22902489/

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