私は現在、ウェブアプリケーションのルートを再編成中です(私はindex.js内のすべてのルートを愚かに定義しました)これらのファイルのうち、私はこの不可解な問題を抱えています:実際に定義されているときに "グローバル変数"変数が定義されていないというエラーが表示されます。グローバル変数が明確に定義されていると「グローバルが定義されていません」というエラーが表示される
これは、問題のファイルの1つです:ライン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;
}
UPDATE: まず問題が解決されました:私はutilities.jsでglobals.jsをインポートしていなかった、と関数にグローバルからのデータを必要な関数を呼び出すしようとしていました。
は残念ながら、今、私はこのエラーを取得する:
--- Error: TypeError: Cannot call method 'connect' of undefined ---
Location: function (err){
utilities.logError(err, arguments.callee.toString());
res.redirect("/");
return;
}
このエラーが第二約束で起こります。私はそれがユーティリティのコード、特にidentUserByToken関数と関係していると思います。
/**
* 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;
}
EDIT
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;
私は、これはMongoDBのが未定義であることを意味知っているが、私はそれをファイルにインポートしています:解決例外TypeError
シンプルタイプミス。 var mongoClient = mongodb.mongoClient;
それが定義するために必要な方法:var mongoClient = mongodb.MongoClient;
申し訳ユーティリティでは、私はそれが定義されていたどのように間違って
mongoClient変数を割り当てました!私の悪い。
mongoClient.connect(url) '? – uglycode
@uglycodeはurlを出力し、次に別のReferenceErrorを取得します。グローバルは定義されていません。 – JimmyStavros
おそらく私はあなたのことを理解していませんでした.37行目でconsole.logに正しい値が表示されていますか?ですから37行目と 'console.log(url);の前に' var url = globals.DB_URL'を実行しても同じ結果が得られますか? – uglycode