【问题标题】:How can I store MongoDB data to a javascript variable?如何将 MongoDB 数据存储到 javascript 变量中?
【发布时间】:2018-04-15 00:00:06
【问题描述】:
var liveJSON = [];
Player.find({teamName: req.query.homeTeam}, function(err, foundHomePlayers){
    if (err) {
        console.log(err);
    } else {
        liveJSON = foundHomePlayers;    <<<<------ HERE!
    }
});

我想将 MongoDB 数据 (foundHomePlayers) 存储到 javascript 变量 (liveJSON) 中。但是这种语法不起作用?如何将整个 foundHomePlayers 存储到 javascript 变量中?

【问题讨论】:

  • 我回答你的问题了吗?没有收到你的回音,我很惊讶。

标签: json node.js mongodb express mongoose


【解决方案1】:

您似乎误解了回调是异步的,并且在触发它们的事件发生之前不会触发,因此尝试将 mongo 数据存储在全局变量中是没有用的 - 就像在您的示例中一样。

var liveJSON = [];
Player.find({teamName: req.query.homeTeam}, function(err, foundHomePlayers){
    if (err) {
        console.log(err);
    } else {
        liveJSON = foundHomePlayers;    <<<<------ HERE!
    }
});
liveJSON // This will not be defined yet because the callback is async

我的替代建议是您触发一个函数,该函数可以在获取 liveJSON 数据后进行处理,而不是依赖于全局变量:

function doSomethingWithLiveJSON(liveJSON) {
    console.log(liveJSON);
}
Player.find({teamName: req.query.homeTeam}, function(err, foundHomePlayers){
    if (err) {
        console.log(err);
    } else {
        doSomethingWithLiveJSON(foundHomePlayers);
    }
});

【讨论】:

    【解决方案2】:

    是的,因为 node.js 遵循异步特性,它不会等待来自 mongodb 回调的回复。 如果要将 mongodb 数据保存到 javascript 变量中,请创建一些函数将数据存储到变量中

    var express=require('express');
    var mongoClient = require('mongodb').MongoClient;
    var app= express();
    var url="mongodb://localhost:27017";
    var g=[];
    app.get('/',(req,res)=>{
    
    mongoClient.connect(url,(err,db)=>{
    var mydb=db.db('mongopract');
    
    mydb.collection('practice').find({name:"solkar"},{projection:{_id:0,name:1,id:2}}).toArray((err,result)=>{
        if(err){
            throw err;
        }else if(result.length){
            storedata(result[0].name);   
    res.send('info'+JSON.stringify(result[0].name));
        }else{
          res.send('no data found');
        }
    })
    })
    
    });
    
    
    function storedata(x){
        g.push(x);
    console.log(g);
    }
    
    var PORT=process.env.PORT||3001;
    
    app.listen(PORT,()=>{
        console.log('port numebr'+PORT)
    });
    

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2020-05-10
      • 2013-08-06
      • 1970-01-01
      • 2014-05-10
      • 2021-04-02
      相关资源
      最近更新 更多