没有定义"全局变量"明确定义globals变量时出错

时间:2016-05-08 21:08:11

标签: javascript node.js mongodb express

我目前正在重新组织我的Web应用程序中的路由(我愚蠢地定义了index.js中的所有路由),并且由于某些原因,在其中一些文件中我遇到了这个无法解释的问题:我收到的错误是"全局"事实上,变量是未定义的。

这是违规文件之一:

http://pastebin.com/7Q5ExZDa

在第37行,我记录了globals.DB_URL的内容,并且它存在。下一行我得到一个错误,即全局变量没有被定义。我做错了什么?

mongodb://localhost:27017/[redacted_db_name] // console log output
--- Error: ReferenceError: globals is not defined ---
 Location: function (err){
            utilities.logError(err, arguments.callee.toString());
            res.redirect("/");
            return;
        }

更新: 第一个问题解决了:我没有在utilities.js中导入globals.js,并且试图调用一个需要从全局变量中运行数据的函数。

不幸的是,现在我收到了这个错误:

--- Error: TypeError: Cannot call method 'connect' of undefined ---
 Location: function (err){
            utilities.logError(err, arguments.callee.toString());
            res.redirect("/");
            return;
        }

此错误发生在第二个承诺中。我认为它可能与实用程序中的代码有关,特别是identifyUserByToken函数。

/**
* identifyUserByToken
* Compares a given session token against the session tokens collection
* executes a given callback function if a match is found
* @param {String} userToken The session token to search for
* @param {function(Object, String)} The callback function to be called upon success, failure, or error
*/
function identifyUserByToken(userToken, callback){
    var user_tokens;
    var users
    var promise = new Promise(function(resolve, reject){
        mongoClient.connect(globals.DB_URL)
            .then(function(db){ // Search user_tokens for userToken
                user_tokens = db.collection("user_tokens");
                users = db.collection("users");
                return user_tokens.find({token : userToken}).toArray();
            })
            .then(function(result){ // Search users for the returned userID
                var userID = result[0].userid;
                return users.find({ userid : userID }).toArray();
            })
            .then(function(matchingUsers){ // Pass returned user object to callback
                var user = matchingUsers[0];
                if(callback != undefined) callback(undefined, user);
                resolve(user);
            })
            .catch(function(err){
                if(callback != undefined) callback(err, undefined);
                reject(err);
            });
    });
    return promise;
}

我知道这意味着mongodb未定义,但我将其导入文件

    var globals = require("./globals");

    /* == Third Party Libraries == */
    var chalk = require("chalk"); /* usage: console output coloring */
    var crypto = require("crypto"); /* usage: cryptograpgic primitives (password hashing, etc...) */
    var mongodb = require("mongodb"); /* usage: data storage schema */

    var mongoClient = mongodb.mongoClient;

编辑:解决了TypeError

简单的拼写错误。在实用程序中,我错误地分配了mongoClient变量

如何定义:var mongoClient = mongodb.mongoClient;

如何定义:var mongoClient = mongodb.MongoClient;

抱歉!我的坏。

1 个答案:

答案 0 :(得分:1)

问题在于 var mongoClient = mongodb.mongoClient;它应该是大写字母M:

 var mongoClient = mongodb.MongoClient;