Доступ к переменной, содержащей данные MongoDB вне блока кода в JavaScript? - PullRequest
0 голосов
/ 12 января 2020

В приведенном ниже коде я пытаюсь сделать так, чтобы переменная "theNames" была доступна мне в других функциях. Когда я пытаюсь получить доступ к нему за пределами текущего блока кода, он возвращается как неопределенный. Я попытался объявить переменную вне блока кода, в котором она находится в данный момент, но я получаю тот же результат. Я не уверен, но я подозреваю, что это может быть потому, что код MongoConnect выполняется позже.

var express = require("express");
    var app = express();
    var port = 3000;
    var bodyParser = require('body-parser');
    var MongoClient = require('mongodb').MongoClient;
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: true }));

    var mongoose = require("mongoose");
    mongoose.Promise = global.Promise;
    mongoose.connect("mongodb://localhost:27017/node-demo");
    var nameSchema = new mongoose.Schema({
        firstName: String,
        lastName: String
    });
    var User = mongoose.model("User", nameSchema);

    app.get("/", (req, res) => {
        res.sendFile(__dirname + "/index.html");
    });

    app.post("/addname", (req, res) => {
        var myData = new User(req.body);
        myData.save()
            .then(item => {
                res.send("Name saved to database");
                User.collection
            })
            .catch(err => {
                res.status(400).send("Unable to save to database");
            });
    });


    listNames = () => {
    var url = 'mongodb://localhost:27017/node-demo';
    var theNames;

          MongoClient.connect(url, function(err, db) {
          if (err) throw err;
          var dbo = db.db("node-demo");
          //Find the first document in the customers collection:
          dbo.collection("users").find({}).toArray(function(err, result) {
            if (err) throw err;
            theNames = result;
            console.log(theNames); //This part of the code works as expected.
            db.close();
          });
        });
    }

    app.listen(port, () => {
        console.log("Server listening on port " + port);
    });

Вот как я пытался изменить код для достижения желаемого результата, но в этом случае «theNames» возвращается как «undefined».

var theNames;

listNames = () => {
var url = 'mongodb://localhost:27017/node-demo';

      MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("node-demo");
      //Find the first document in the customers collection:
      dbo.collection("users").find({}).toArray(function(err, result) {
        if (err) throw err;
        theNames = result;
        console.log(theNames);
        db.close();
      });
    });
}

console.log(`Here is a list of theNames: ${theNames}`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...