我目前正在重新组织我的网络应用程序中的路由(我愚蠢地定义了index.js中的所有路由),并且由于某种原因,在其中几个文件中我遇到了这个无法解释的问题:我收到错误消息,指出“globals”变量未定义,而实际上它已定义。
这是有问题的文件之一:
在第 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;
}
此错误发生在第二个 Promise 时。我认为这可能与实用程序中的代码有关,特别是与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;
编辑:解决了类型错误
简单的错字。在实用程序中,我错误地分配了 mongoClient 变量
如何定义:var mongoClient = mongodb.mongoClient;
需要如何定义:var mongoClient = mongodb.MongoClient;
抱歉!我的错。
最佳答案
问题在于 var mongoClient = mongodb.mongoClient;
它应该是大写的 M:
var mongoClient = mongodb.MongoClient;
关于javascript - 明确定义全局变量时出现 "globals is not defined"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104828/