Ваша проблема не в module.exports, а в асинхронном программировании . Когда вы вызываете MongoClient.Connect, код вашего обратного вызова не выполняется синхронно. Это будет выполнено некоторое время в будущем. Вы не можете контролировать, когда это произойдет.
То же самое относится и к обратному вызову findDocument.
Асинхронное программирование немного сложнее, но вам придется научиться писать современный javascript. Асинхронность является центральной t enet из nodejs. Прочтите его , изучите примеры, и ваша проблема станет понятной.
Вместо экспорта значений partner1, 2 и 3 экспортируйте функцию с обратным вызовом. Эта новая функция может вызывать MongoClient.Connect, передавая обратный вызов. Endfile.ts теперь может вызывать вновь созданную асинхронную функцию и назначать массив заголовков в обратном вызове.
Примерно так:
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;
});