gpt4 book ai didi

node.js - 如何从 Mongoose 查询返回值

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:13 25 4
gpt4 key购买 nike

我正在开发一个注册 block ,它在将数据输入到 mongo 之前进行一些服务器端验证。我对 Mongoose 非常陌生,在将数据返回到完成所有注册过程的方法时遇到问题。

在我的机车 Controller 中,我有一个方法可以包装所有内容以启动注册过程。

auth = new Authenticator();
auth.signUp(this.req.body);

在我的身份验证对象中,signUp 只是在创建新用户之前验证数据。一项验证是数据库中尚未创建重复的电子邮件。

this.signUpUser = function(user) {

if(this.isNotDuplicate(user.email) {
//continue doing whatever needs done to the data afterwards
} else {
response['error'] = True
response['response'] = "duplicate email"
}

}

我正在尝试的一种方法是查找匹配的电子邮件并返回 true 或 false。

this.isNotDuplicate = function(email) {

query = user.findOne({ 'email': email });
query.exec(function(error, user) {

if(error) {
console.log(error);
}

console.log(user);
return (user === null) ? false : true;

});
}

如果我在数据库中传递电子邮件,则在使用 console.log() 时我可以看到用户,但这不允许我返回任何内容,除非它是机车返回响应对象。但我需要能够继续对数据进行处理。我意识到我这样做可能完全错误,所以如果我的设计不好,我需要解释如何更改它以与 Node.js、express 和 locomotive 一起使用。

我已阅读 mongoose 关于查询的文档 ( http://mongoosejs.com/docs/queries.html )。在他们的示例中,他们使用 console.log(),但当然有一种方法可以在其他地方使用从 mongoose 提取的数据,而不仅仅是在 mongoose 查询中。如果我的设计不好,那么建议如何更改它?或者我怎样才能返回来自 Mongoose 查询的数据或另一个要使用的值?

最佳答案

您需要使 this.isNotDuplicate 异步。尝试这样的事情:

this.isNotDuplicate = function(email, callback) {
var query = user.findOne({ 'email': email })
query.exec(function(err, user) {
if (err) {
console.log(err)
callback(err)
} else {
console.log(user)
cb(null, !!user)
})
}

然后在检查用户时:

this.signUpUser = function(user) {
this.isNotDuplicate(user.email, function(err, exists) {
if (err || exists) {
response['error'] = true
response['message'] = (exists) ? 'duplicate email' : 'error'
} else {
// continue doing whatever needs to be done
}
})
}

关于node.js - 如何从 Mongoose 查询返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19886882/

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