首页 > 解决方案 > 导出已在导出函数中使用的变量

问题描述

我正在尝试在一个单独的文件中初始化我的 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,
};

标签: javascriptnode.jsmongodbecmascript-6

解决方案


如果是我,我会避免默认导出并执行以下操作:

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();
    }
};

推荐阅读