Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node Js:导出可用的Mongo数据库名称不会';行不通_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript Node Js:导出可用的Mongo数据库名称不会';行不通

Javascript Node Js:导出可用的Mongo数据库名称不会';行不通,javascript,node.js,mongodb,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

我正在努力将可用的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文件不是一个选项


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

您正在导出
可访问的\u数据库
对象,然后再对其进行初始化

试着这样做:

 var DB_OBJ = {};
 adminDb.listDatabases(function(err, dbs) {
    assert.equal(null, err);
    assert.ok(dbs.databases.length > 0);
    //export the array here
    DB_OBJ.accessible_databases = ACCESSIBLE_DATABASES = dbs.databases;
    db.close();
});

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

您正在导出
可访问的\u数据库
对象,然后再对其进行初始化

试着这样做:

 var DB_OBJ = {};
 adminDb.listDatabases(function(err, dbs) {
    assert.equal(null, err);
    assert.ok(dbs.databases.length > 0);
    //export the array here
    DB_OBJ.accessible_databases = ACCESSIBLE_DATABASES = dbs.databases;
    db.close();
});

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

因为这涉及异步操作,所以您尝试导出的方式不起作用。一旦操作完成,您必须传递回调以获取数据库

例如

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

因为这涉及异步操作,所以您尝试导出的方式不起作用。一旦操作完成,您必须传递回调以获取数据库

例如

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

“const dbs=require('./dbs');”代表什么?我想在启动时查询现有的数据库并建立连接,即var monk=require('monk');var TEST_DB1=monk('localhost:27017/TEST_DB1'));我还想导出它以避免代码重复。code-jaff:你部分理解我的问题。我想查询app.js文件本身中的现有数据库,以建立与它们的连接,并使它们可供客户端请求使用。除此之外,我还想在index.js文件中导入可访问的数据库,其中请求被删除为避免代码冗余,对客户端进行了罚款。我也可以在应用程序文件中进行罚款,这无关紧要,但由于异步模式无法建立连接。解决方案正在运行,导入路径中只缺少一个点:const dbs=require('../app')。databases;何谓“const dbs=require('./dbs')代表?我想在启动时查询现有数据库并建立连接,即var monk=require('monk');var TEST_DB1=monk('localhost:27017/TEST_DB1'));我还想导出它以避免代码重复。code-jaff:你部分理解我的问题。我想查询app.js文件本身中的现有数据库,以建立与它们的连接,并使它们可供客户端请求使用。除此之外,我还想在index.js文件中导入可访问的数据库,其中请求被删除为避免代码冗余,对客户端进行了罚款。我也可以在应用程序文件中进行罚款,这无关紧要,但由于异步模式无法建立连接。解决方案正在运行,导入路径中只缺少一个点:const dbs=require('../app')。databases;