Node.js:无法返回 Mongoose 查找结果

标签 node.js mongodb express mongoose

我是 Node.JS 的新手,找不到解决方案。 我正在构建一个 Restful 服务来从 mongo 检索数据。

应用程序.js

var database = require('./database.js');
...

app.get('/metadata', function(req, res) {
    console.log("GET: metadata");
    res.send(database.getMetadata(null));
});

app.get('/metadata/:id', function(req, res) {
    console.log("GET: metadata");
    res.send(database.getMetadata(req.params.id));
});
...

数据库.js

exports.getMetadata = function (id) {
    console.log('getting metada...')
    if (id == null) {
        return FolderInfo.find({}, null, null, function (err, metadatas) {
            if (!err) {
                console.log(metadatas);
                return metadatas;
            } else {
                return console.log(err);
            }
        });
    }
    else {
        return FolderInfo.findById(id, function (err, metadatas) {
            if (!err) {
                return metadatas;
            } else {
                return console.log(err);
            }
        });
    }
}

我尝试过许多不同的方法。但总是得到这样的结果:

{
    options: {
        populate: { }
    },
    _conditions: { },
    _updateArg: { },
    op: "find"
}

但我的 console.log(metadatas); 行正在将结果打印到控制台。 我正在使用所有最新的软件包。 有人可以帮助我吗?

最佳答案

您不能真正将同步 returnfindById 等异步函数混合使用,因为它违背了异步操作的基本性质:“现在退出,稍后完成。”

您必须调整 getMetadata 以接受可以在 findById 稍后完成 时调用的回调函数:

exports.getMetadata = function (id, callback) {
   // ...
};

并且,不是仅在没有 err 时才返回 metadatas:

if (!err) {
    return metadatas;
} else {
   // ...
}

无论哪种情况,您都需要调用回调:

callback(err, err ? null : metadatas);

在上下文中,这可能是:

FolderInfo.find({}, null, null, function (err, metadatas) {
    if (err) {
        console.log(err);
    } else {
        console.log(metadatas);
    }

    callback(err, err ? null : metadatas);
});

或者可能只是:

FolderInfo.find({}, null, null, callback);

然后传递给getMetadata一个回调函数,在调用时处理响应:

app.get('/metadata', function(req, res) {
    console.log("GET: metadata");
    database.getMetadata(null, function (err, data) {
        res.send(data);
    });
});

关于Node.js:无法返回 Mongoose 查找结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12220621/

相关文章:

node.js - 服务器端包含在expressjs中

node.js - 使用 Karma 进行 AngularJS 测试

javascript - express.js 返回不必要的数据

javascript - Bunny.net CDN token 身份验证不起作用(对于 .m3u8 文件)

Java:将 json 数组插入 MongoDB 时出错

node.js - 在Azure中作为应用程序服务运行的node.js应用程序的暂存槽为我提供了EADDRINUSE

javascript - Mongoose 对于循环中的每个元素

node.js - 无法 $pull 形式嵌入对象中的数组

javascript - 是否可以获得 node.js 正在服务的当前请求?

javascript - 如何在 Mean Stack 中运行子进程