[英]NodeJS and MongoDB losing the definition of a variable even with module.exports
您好,我正在嘗試從我的 mongodb 數據庫中獲取一些合作伙伴名稱並將它們放入變量列表中。 但是當我嘗試導出它時,由於某種原因它失去了它的定義。 這是怎么回事?
這是第一個文件。
///// mongodb.js /////
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const findDocuments = function(db, callback) {
// Get the documents collection
const collection = db.collection('partners');
// Find some documents
collection.find({}).toArray(function(err, docs) {
assert.equal(err, null);
callback(docs);
});
};
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'yarle';
// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
assert.equal(null, err);
console.log("Connected succesfully to Database");
const db = client.db(dbName);
findDocuments(db, function(docs) {
module.exports = {
partner1: console.log(docs[0]['partner_name']),
partner2: console.log(docs[1]['partner_name']),
partner3: console.log(docs[2]['partner_name']),
};
client.close();
});
});
//console.log(Object.keys(partners[0][0]));
這是最終文件。
///// Endfile.ts /////
import { Request, Response } from 'express';
import { PartnersList } from './data.d';
var partners = require( './mongodb.js');
console.log(partners.partner1);
const titles = [
partners.partner1,
partners.partner2,
partners.partner3,
];
您的問題不在於 module.exports,而在於異步編程。 當您調用 MongoClient.Connect 時,您的回調中的代碼不會同步執行。 它會在未來的某個時間執行。 你無法控制這種情況何時發生。
findDocument 回調也是如此。
異步編程有點棘手,但您必須學習它才能編寫現代 javascript。 異步是 nodejs 的核心原則。 閱讀它,學習示例,您的問題就會變得清晰。
不是導出 partner1、2 和 3 的值,而是導出帶有回調的函數。 這個新函數可以調用 MongoClient.Connect,傳遞回調。 Endfile.ts 現在可以調用您新創建的異步函數並在回調中分配 titles 數組。
像這樣:
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const findDocuments = function (db, callback) {
// Get the documents collection
const collection = db.collection('partners');
// Find some documents
collection.find({}).toArray(function (err, docs) {
assert.equal(err, null);
callback(docs);
});
};
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'yarle';
module.exports.getPartners = (callback) {
// Use connect method to connect to the server
MongoClient.connect(url, function (err, client) {
if (err) {
callback(err);
return;
}
console.log("Connected succesfully to Database");
const db = client.db(dbName);
findDocuments(db, function (docs) {
const partners = {
partner1: docs[0]['partner_name'],
partner2: docs[1]['partner_name'],
partner3: docs[2]['partner_name']
};
callback(null, partners);
client.close();
});
});
}
和這個
import { Request, Response } from 'express';
import { PartnersList } from './data.d';
var mongoClient = require('./mongodb.js');
mongoClient.getPartners(function (err, partners) {
assert.equal(null, err);
const titles = partners;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.