MongoDB查询:我无法在回调范围之外获取结果对象

时间:2019-05-19 14:43:48

标签: node.js mongodb express

我正在使用连接到MongoDB的Express API,当我查询数据库以获取结果时,我只能在回调范围内使用它们,甚至当将结果的值分配给全局声明的变量时,使用console.log(),结果是不确定的

这是我的代码

const MongoClient = require('mongodb').MongoClient;

const express = require('express');
const assert = require('assert');

const app = express();
const PORT = process.env.PORT||13000;



app.get('/',(req,res) => {

        let myIncomingData;

const url = 'mongodb://localhost:27017/';
        MongoClient.connect(url,{useNewUrlParser:true},(err,db)=>{
        assert.equal(err,null);
        db.db('my_posts').collection('posts').find().toArray((err,result) =>{
         assert.equal(err,null);
         console.log(result);       // here the result gets printed 
         myIncomingData = result;
        }); // db.collection
   db.close();



        }); // MongoClient.connect
        console.log(myIncomingData);  //  print undefined  why ??
}) // app.get


app.listen(PORT,()=>console.log('server is running ...'))

1 个答案:

答案 0 :(得分:0)

节点是异步的,因此在执行 .dropdown-submenu { position: relative; } .dropdown-submenu .dropdown-menu { top: 0; left: 100%; margin-top: -1px; } 时,console.log仍未定义(您甚至可以按myIncomingData的顺序看到它-首先它将记录第二个console.logs中未定义的内容,然后记录回调中的console.log。如果您希望看到此效果,可以尝试执行console.log之类的操作-通过延迟5秒,可以确定回调代码将运行,并且如果您想进一步执行此操作值,则需要在回调中完成操作(内联或通过调用其他函数)

async/awaitPromises可以使这样的代码更易于阅读和推理。如果您想继续使用回调,那么有必要看一下回调教程,以确保您了解回调发生了什么。