【问题标题】:MongoJS Node.js modules:"db is not undefined"MongoJS Node.js 模块:“db 不是未定义的”
【发布时间】:2014-05-27 04:17:23
【问题描述】:

我是 Node.js、MongoDB 和 MongoJS 的新手。

我有app.js,这是我使用node app.js 从命令行运行的服务器。在具有 OS X 10.9.1 和 Node.js v0.10.28 的本地计算机上。

app.js我有(作为sn-ps)

var db = require('./database');

var blog = require('./classes/blog');

database.js

var db = require("mongojs");

db.connect('mydb',  ["Users", "Posts"]);

/classes/blog.js

function load(OnDone) {
    if (db.connected) {
        OnDone();
    }
}

当我打电话给blog.load() 我得到

ReferenceError: db is not defined
    at Object.load (node/classes/blog.js:13:6)
    at node/app.js:36:7
    at Server.onRequest (node/server.js:35:12)
    at Server.EventEmitter.emit (events.js:98:17)
    at HTTPParser.parser.onIncoming (http.js:2108:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23)
    at Socket.socket.ondata (http.js:1966:22)
    at TCP.onread (net.js:527:27)

当我尝试调用我的 load() 函数时,我的应用程序中的所有内容都按预期工作除了

为什么db 是未定义的?我是否使用了错误的模块?

注意:如果你不知道,我从我的脚本中提取了这些代码行,因为到目前为止我的应用程序对于 SO 问题来说相对较长,我不想全部展示除非我需要。

【问题讨论】:

    标签: javascript node.js mongodb mongojs


    【解决方案1】:

    我相信 Node.js 模块包含在内,因此无法访问在其父级中定义的变量(如我所料)。

    我将db 移动到全局命名空间(我删除了var),它现在可以工作了。

    【讨论】:

    • 为什么不将require 添加到正确引用数据库连接的blog.js 文件中?
    • 那么对于每个需要数据库的模块,都需要数据库模块吗?
    • 这就是我的建议。这样,顺序总是正确的,您可以放心连接/等。已正确建立。
    • 我会试试的。这是有道理的,但我认为它就像 PHP 一样,如果你 require() 两次,它会运行两次所需的文件。
    • 否,节点中的必需文件运行一次并被缓存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2021-01-19
    • 2012-07-27
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多