从猫鼬模型中返回对象

时间:2013-07-25 13:53:41

标签: node.js mongoose

我的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);
});

1 个答案:

答案 0 :(得分:1)

在findUser中,您似乎无法为回调提供一个位置。 mongoose查询本身也将文档(s或错误)返回给要处理的回调。

如果您想修改findUser以符合您的使用方式:

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

mongoose查询的结果(成功与否)被传递给查询参数中的函数(作为回调),这符合Node的异步性质。处理Node的非阻塞I / O的其他普遍接受的方法是eventsstreams,如果有些争议,promises等方法是可行的。

Mongoose本身使用callbacks in its guides,但也有promises available

现在查看您的功能,您将其名称提交给查询,以及您要将返回的文档作为回调进行处理。猫鼬功能本身已经具备了做任何事情的能力:

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

如果您在findUser将保持干燥的文档中有很多事情要做,那么定义findUser可能是值得的。