javascript - Node Js : Exporting available Mongo database names doesn't work

标签 javascript node.js mongodb

我正在努力将可用的 Mongo 数据库导出到 ./routes/index.js。

app.js的相关部分:

var ACCESSIBLE_DATABASES = [];
var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server,
    assert = require('assert');

var db = new Db('test', new Server('localhost', 27017));

db.open(function(err, db) {
    var existing_databases = [];
    var adminDb = db.admin();

// List all the available databases
    adminDb.listDatabases(function(err, dbs) {
        assert.equal(null, err);
        assert.ok(dbs.databases.length > 0);
        ACCESSIBLE_DATABASES = dbs.databases;
        db.close();
    });
});
// Code below export empty array
module.exports.accessible_databases = ACCESSIBLE_DATABASES;

// After some milisec the array has already contain the databases
setTimeout(function() {
    console.log(ACCESSIBLE_DATABASES);
}, 100);

我想避免在我的index.js 文件中出现代码重复,但我无法实现。导入既不能在“adminDb.listDatabases”函数内部运行,也不能在“setTimeout”函数中运行。 (我想稍后在 app.js 文件中使用结果,因此不能将代码迁移到 index.js 文件中。

我认为这是异步代码执行的原因。

最佳答案

由于这涉及异步操作,因此您尝试导出的方式将不起作用。操作完成后,您必须传递回调来获取数据库。

例如。

function getDBs(db, adminDb, callback) {
   // List all the available databases
   adminDb.listDatabases(function(err, dbs) {
       assert.equal(null, err);
       assert.ok(dbs.databases.length > 0);
       db.close();
       callback(null, dbs);
   });
}

function openHandler(callback) {
    return function(err, db) {
        var adminDb = db.admin();
        getDBs(db, adminDb, callback);
    }
}

module.exports.databases = function(callback) {
    db.open(openHandler(callback));
}

// usage in routes/index.js
const dbs = require('./app').databases;
dbs(function(err, availableDBs) {
    console.log(availableDBs);
});

关于javascript - Node Js : Exporting available Mongo database names doesn't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40978393/

相关文章:

javascript - 通过 JavaScript 获取所有表单值

javascript - 如何防止输入控件允许事件冒泡?

mongodb - 使用 meteor 和 mongodb 在表中显示键值对

javascript - 点击展开div不起作用

javascript - 阻止输入提交html代码/脚本

node.js - 如何在 mongoose 中创建创建路由来创建数组列表

javascript - Node.js 执行顺序查询

javascript - 在哪里发送 JWT token ?

mongodb - Pig MongoLoader 异常加载带有 UUID 的数据

java - MongoDB:查找所有字段和值(_id 除外)都等于给定文档的文档?