javascript - 导出已在导出函数中使用的变量
问题描述
我正在尝试在一个单独的文件中初始化我的 mongodb。我正在函数内部编写初始化并导出函数。现在,我还想导出该函数中写入的数据库。我该怎么做?
我想做这样的事情。
import { MongoClient } from 'mongodb';
import config from '../../config';
import logger from '../../logger';
const connectDB = async () => {
const client = new MongoClient(config.dbUri, {
userNewUrlParser: true,
useUnifiedTopology: true,
});
try {
await client.connect();
const db = client.db('sample_mflix');
logger.info('Connected to Database');
} catch (e) {
logger.error(e);
} finally {
await client.close();
}
};
export default {
connectDB,
db,
};
解决方案
如果是我,我会避免默认导出并执行以下操作:
import { MongoClient } from 'mongodb';
import config from '../../config';
import logger from '../../logger';
export let db;
export const connectDB = async () => {
const client = new MongoClient(config.dbUri, {
userNewUrlParser: true,
useUnifiedTopology: true,
});
try {
await client.connect();
db = client.db('sample_mflix');
logger.info('Connected to Database');
} catch (e) {
logger.error(e);
} finally {
await client.close();
}
};
或者如果你想要一个更好的错误
import { MongoClient } from 'mongodb';
import config from '../../config';
import logger from '../../logger';
let db;
export const getDB = () => {
if (!db) {
throw new Error("DB Not yet connected");
}
return db;
}
export const connectDB = async () => {
const client = new MongoClient(config.dbUri, {
userNewUrlParser: true,
useUnifiedTopology: true,
});
try {
await client.connect();
db = client.db('sample_mflix');
logger.info('Connected to Database');
} catch (e) {
logger.error(e);
} finally {
await client.close();
}
};