【发布时间】: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)
【问题讨论】:
-
import本身不应引起副作用(例如建立数据库连接)。 -
你需要
this.db = await this.client.connect() -
和
return await ...几乎总是不正确 -
看看github.com/isc-projects/perflab,尤其是
lib/database.js。
标签: javascript mongodb promise