导出的变量未定义,而函数在node js中导出
exported variables got undefined while functions get exported in node js
我正在创建使用mongodb的nodejs应用程序。
我连接到mongodb只有一次。我想在所有其他api中使用db
,以实现连接池。
我有以下代码mongodb连接:
var mongodb = require('mongodb');
var MongoClient = require('mongodb').MongoClient;
var db;
var mongoUrl = "mongodb://localhost:27017/testDB";
/**
* Connects to the MongoDB Database with the provided URL
*/
exports.connect = function(callback){
if(!db){
MongoClient.connect(mongoUrl, function(err, _db){
if (err) { throw new Error('Could not connect: '+err); }
db = _db;
console.log(db);
connected = true;
console.log(connected +" is connected?");
callback(db);
});
}else{
console.log("Not connected tis time as I am already connected");
callback(db);
}
};
exports.db = db;
当服务器从app.js
启动时,我只调用connect
一次。当调用signin, register
等其他api时,它们应该简单地使用导出的db。
所以我的api调用将类似于(请忽略api调用中的语法错误:D):
var mongo = require('./mongo');
collection = mongo.db.collection("testCollection");
// Here mongo.db id undefined
collection.findOne({"name":"John"}, function(err, result){
// Do your stuff with result here
});
从其他stackoverflow的帖子,我尝试了一些像蒙古。js的
module.export{
db: db,
connect : function(callback){
//function code goes here
}
}
但我仍然得到mongo.db
的undefined
如何访问其他文件中的mongodb .db ?由于
发生这种情况的原因是,因为connect覆盖模块中的db
。exports.db=db;
不是在调用connect
函数之后执行的,而是在执行模块导入时执行的。
因此,当您调用connect
时,db被设置为另一个变量,但该变量未在外部公开。
最近没有做太多的JS,但是这个应该可以了:
module.exports = new mongobj();
function mongobj() {
this.db = null;
this.connect = function(callback) { /* your connect code set mongobj.db */
this.db = /* new value */ ;
}
}
当您导入模块时,您将获得对象。访问对象的db
属性将始终暴露由模块的connect
函数设置的最新db
值。
var mongo = require('yourmodule');
// mongo.db is null
mongo.connect(some callback);
// mongo.db is set
此连接添加到主脚本文件中…
var mongodb = require('mongodb');
var mongodb = require('mongodb');
var MongoClient = require('mongodb').MongoClient;
var mongoUrl = "mongodb://localhost:27017/testDB";
ObjectId = module.exports = require("mongojs").ObjectId;
MongoClient.connect(mongoUrl, function(err, database){
if(err){
console.log("mongodb error >>"+err);
} else {
db = module.exports = database;
}});
db.collection('game_users').findOne({_id:ObjectId("123456789")},function(err, data) {});
定义对象:
var db = {__db: undefined}
然后:
exports.db = db
const db = require('./mongo').db.__db
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 如何使用 node.js 比较两个 json 数组
- Node.js's Buffer.writeFloatBE in Javascript
- node.js:setInterval()正在跳过调用
- 如何处理node.js节点mongodb中的连接和查询队列
- Node.js正在更改应用程序以使用集群模块
- 如何使用Node.js最有效地解析网页
- 在openshift node js应用程序中获取请求
- 正在删除node.js中已验证的网站
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 在索引.html和应用.js [node.js] 之间共享变量
- Node.js中的JavaScript原型对象效率
- node.js请求数据事件未在CORS ajax调用中触发
- 使用node.js制作网站
- 使用node.js服务器中的evernote api获取note内容
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 使用CI和CodeDeploy对node.js应用程序进行连续部署
- 在Node.js中上传和检索图像
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 如何使用 Node JS 获取 JSON 嵌套数组值