В приведенном ниже коде я пытаюсь сделать так, чтобы переменная "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}`)