【问题标题】:Mongoose how I can return findOne data object猫鼬我如何返回 findOne 数据对象
【发布时间】:2014-07-29 18:56:30
【问题描述】:

代码如下:

var mongoos = require('./getMongoos.js');

var user = mongoos.addressFromMongoos(username[0]);

console.log(user); // i need the mongoos find here

getMongoos.js:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userShema = new Schema({ 
    username: String
});
db = mongoose.createConnection('localhost/***');
var user = db.model('User', userShema);

exports.addressFromMongoos = function(username){

    user.find({username: username}, function(err, user) {
        if (err) {
          callback(err, null);
        } else {
            console.log(user); //works
        }
    });

};

但我不知道如何在 var 用户中返回查找用户:

var user = mongoos.addressFromMongoos(username[0]);

【问题讨论】:

  • 为什么?为什么不返回数据或从回调中使用它?你的意图在这里并不清楚,你认为你想做的可能不是你真正想要的。您可以通过编辑您的问题来解释这一点来澄清这一点。
  • 我只会将用户的地址返回给另一个函数
  • 我之前说过的是你的意图不是很清楚。您的其他函数很可能应该从值范围内的回调中调用或以其他方式嵌套在其中。这就是重点,因为在该回调之外,该值还没有返回。
  • 有人有想法吗?如何在变量中找到?

标签: node.js mongodb mongoose


【解决方案1】:

您不能直接从同步函数返回异步结果。您必须改用回调:

exports.addressFromMongoos = function(username, callback){
    user.findOne({username: username}, callback);
};

称它为:

mongoos.addressFromMongoos(username[0], function(err, user) {
    console.log(user);
});

【讨论】:

  • 但我需要用户在回调之外! mongoos.addressFromMongoos(username[0], function(err, user) { console.log(user); //这有效 });我这里需要用户对象
  • @user3721702 您需要将需要访问user 的任何代码放入回调(或从中调用)。这就是 node.js 异步的工作原理。
  • 没有办法同步请求吗?还是调用变量中的数据?
猜你喜欢
  • 2021-09-03
  • 2019-03-25
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多