我正在尝试从mongodb集合中获取单个文档,并将该文档用作javascript中的对象。问题是我需要将它作为普通对象存储在javascript中的json仅在我从response.json(doc)
调用它时才会出现,并且我无法在函数外部访问该文档。我发现的所有信息都令人困惑!
是否有可能有这样的事情:
var a = mongoose.model('collectionName').findOne() //etc.
只需获取整个文档并将其转换为可在全局范围内访问的javascript对象,因此我可以随时从a
获取属性。
答案 0 :(得分:1)
听起来你有一个node.js回调问题。 这不仅适用于mongoose,但您为node.js编写的任何代码都将如下所示:
rac_textSignal()
所以你只需嵌套回调,直到你拥有发送响应所需的一切。
你需要习惯这种编程风格。 一旦你对此感到满意,你会发现有时嵌套变得太深(callback hell)。
有解决方案 - 将您的回调拆分为单独的函数或使用async,promises,es6 generators。
但首先,你需要“自然地”理解它的完成方式。
答案 1 :(得分:0)
NodeJS的主要概念(因此使用MongoDB)是您正在编写的代码的异步性质。您对数据库的任何查询都将与代码的其余执行异步发生。因此,您需要使用查询传递回调函数,以便在查询完成时,将执行回调函数。您要分配给查询结果的任何变量都应该在该回调中完成。
例如:
mongoose.model('collectionName').findOne( { ' some query here' }, function(err, doc) {
// set some variable to the 'doc' result if you want
// put any logic here to handle the result
});
您在回调方法中放入的任何代码都将在查询完成时执行。因此,在对结果文档执行任何操作之前,应始终检查是否存在错误。