0

我的 User.js 类中有以下代码:

exports.findUser = function(nameIn){
  User.find({
    name: nameIn
  });
)};

我怎样才能让它“返回”它找到的用户?有些东西告诉我,在 Node 上使用“return”不是最佳实践?我想我需要使用回调,但是,如何?

这是我用来调用函数的代码:

var User = require("../models/user.js");

User.findUser(req.params.name, function(users) {
  console.log(users);
});
4

1 回答 1

1

在 findUser 中,您似乎没有为该回调提供去处。mongoose 查询本身也将文档(或错误)返回给要处理的回调。

如果您想修改您的findUser以适应您的使用方式:

exports.findUser = function(nameIn,callback){
  User.find({name: nameIn}, function(err,user) {
    if (err)
      throw err;
    callback(user)
  });
)};

mongoose 的查询结果(成功与否)在查询的参数中交给函数(作为回调),这符合 Node.js 的异步特性。其他普遍接受的处理 Node 的非阻塞 I/O 的方法是事件,如果有争议的话,像promises这样的方法是可行的。

Mongoose 本身在其指南中使用回调,但也有可用的承诺

现在查看您的函数,您将要查询的名称以及您希望将返回的文档作为回调做什么。mongoose 函数本身已经具备了无所不能的能力:

User.find({name: req.params.name}, function(err,user) {
  if (err)
    throw err;
  console.log(user);
});

只有当您在该文档中有很多可以保持 DRY的内容时,定义findUser才可能是值得的。findUser

于 2013-07-25T14:00:27.603 回答