【问题标题】:Mongodb connect object with optional methodMongodb 使用可选方法连接对象
【发布时间】:2018-12-20 08:14:50
【问题描述】:

我想创建一个 mongodb 对象,它有一个可选的方法来在连接后创建 Collection。

我有这样的东西(mongo.js):

import url from 'url';
import { MongoClient } from 'mongodb';

const getDbName = mongourl => {
  const mongoPathName = url.parse(mongourl).pathname;
  return mongoPathName.substring(mongoPathName.lastIndexOf('/') + 1);
}

export let db = null;

(async function() {

  const dbURL = process.env.MONGO_URL;
  const dbName = getDbName(dbURL);

  const client = new MongoClient(dbURL, { useNewUrlParser: true });

  try {

    await client.connect();
    db = client.db(dbName);

  } catch (err) {
    console.log(err);
  }

})();

如果我想连接到 db,我只是这样做:

import { db } from './libs/mongo';

但我的问题是如何添加可选方法,以便在连接到数据库后创建集合? 我想得到类似的东西:

import { db } from './libs/mongo';

db.then(() => { // if db is connected ->
 //createCollection or something else
})

我想用 Promise 来做,但我不知道怎么做。 我想至少在两个地方使用这个库。 1、与base连接,在第二个(单独)连接并创建集合(setup)

【问题讨论】:

标签: javascript mongodb promise


【解决方案1】:

您的import 本身不应引起副作用。

mongo.js 模块中,我建议导出一个包含async 方法的类或对象以返回数据库连接。

这是我在自己的一个项目中使用的方法,其中构造函数返回一个新对象,该对象最初只有一个 connect 方法,当调用该方法时,会将其他与数据库相关的函数附加到该对象。

class Database {

    constructor(settings) {
        this.connect = async () => {
            let db = await MongoClient.connect(url, settings);

            this.someDbMethod = () => {
                return db.collection('foo').find(...);
            }

            return this;
        }
    }
}

有用法:

let db = await new Database(url, settings).connect();
let rec = await db.someDbMethod();

构造函数不能是异步的,因此我使用辅助函数来执行实际连接。

【讨论】:

  • 我遇到了一个错误:“await is a reserved word” in usage
  • 您是否在标记为 async 的函数中对 await ... 进行调用?
  • 我的编辑在import Database from './libs/mongo'; let db = await new Database().connect();中显示“新”错误
  • 你真的导出了那个类吗?此外,这应该只是示例代码,而不是完整的工作系统。
  • 是的,当然 :-) 我知道这只是一个例子 :-) 我已经把这个例子做了更多,但它并没有像以前那样工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2018-01-03
  • 2013-09-13
  • 1970-01-01
  • 2019-01-09
  • 2018-02-19
  • 1970-01-01
相关资源
最近更新 更多