gpt4 book ai didi

javascript - 如何导出仅在异步回调中可用的对象?

转载 作者:IT老高 更新时间:2023-10-28 12:29:06 31 4
gpt4 key购买 nike

我有一个 db.js 文件,我在其中设置了 MongoDB 连接。我想将数据库对象导出到我的主 app.js 文件中:

// db.js
require('mongodb').MongoClient.connect(/* the URL */, function (err, db) {
module.exports = db;
});

// app.js
var db = require('./db');

app.get('/', function (req, res) {
db.collection(/* … */); // throws error
});

错误是:

TypeError: Object # has no method 'collection'

那么,如何正确导出 db 对象?

最佳答案

最好的选择,如 suggested in the commentselclanrs , 是导出一个 promise :

// database.js
var MongoClient = require('mongodb').MongoClient,
Q = require('q'),
connect = Q.nbind(MongoClient.connect, MongoClient);

var promise = connect(/* url */);

module.exports = {
connect: function () {
return promise;
}
}

// app.js
var database = require('./database');

database.connect()
.then(function (db) {
app.get('/', function (req, res) {
db.collection(/* … */);
});
})
.catch(function (err) {
console.log('Error connecting to DB:', err);
})
.done();

(我在这里使用了很棒的 Q 库。)


下面是我的答案的旧版本,为了历史而留下(但如果你不想使用 promise ,而不是走那条路,你应该使用 Matt's answer)。

它的缺点是每次你 require('database.js) 时它都会打开一个连接(太糟糕了!)

// DO NOT USE: left for the sake of history

// database.js
var MongoClient = require('mongodb').MongoClient;

function connect(cb) {
MongoClient.connect(/* the URL */, cb);
}

module.exports = {
connect: connect
}

// app.js
var database = require('./database');

database.connect(function (err, db) {
app.get('/', function (req, res) {
db.collection(/* … */);
});
});

关于javascript - 如何导出仅在异步回调中可用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939452/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com