2016-05-08 13 views
1

Ich bin gerade dabei, die Routen in meiner Webanwendung (ich habe alle Routen in index.js dumm definiert) und aus irgendeinem Grund in mehreren Von diesen Dateien habe ich dieses unerklärliche Problem: Ich bekomme Fehler, die sagen, dass die Variable "globals" nicht definiert ist, wenn sie tatsächlich definiert ist.Getting "Globals ist nicht definiert" Fehler, wenn Globals Variable eindeutig definiert ist

Dies ist einer der beanstandeten Dateien:

http://pastebin.com/7Q5ExZDa

Bei 37 Zeile log ich den Inhalt globals.DB_URL, und es existiert. Die nächste Zeile bekomme ich einen Fehler, dass Globals nicht definiert ist. Was mache ich falsch?

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: Das erste Problem war gelöst: Ich war nicht globals.js in utilities.js importieren, und versuchte, eine Funktion aufzurufen, die Daten von Globals benötigt funktionieren.

Leider jetzt bekomme ich diesen Fehler:

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

Dieser Fehler beim zweiten Versprechen passiert. Ich denke, dass es etwas mit dem Code in Dienstprogrammen zu tun hat, insbesondere mit der Funktion "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; 
} 

Ich weiß, das bedeutet mongodb nicht definiert ist, aber ich bin es in der Datei importieren

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; 

EDIT: Gelöst Typeerror

Einfache Tippfehler. In Utilities wurde Zuweisung ich die mongoClient Variable falsch

Wie es definiert wurde: var mongoClient = mongodb.mongoClient;

Wie es definiert werden musste: var mongoClient = mongodb.MongoClient;

Entschuldigen Sie! Mein Fehler.

+0

, was passieren würde, wenn Sie 'var url = tat globals.DB_URL' und dann die URL-Wert log und geben es' zu mongoClient.connect (URL) '? – uglycode

+0

@uglycode druckt die URL und dann bekomme ich einen anderen ReferenceError: globals ist nicht definiert. – JimmyStavros

+0

vielleicht habe ich dich nicht richtig verstanden: Du hast gesagt, dass in der 37. Zeile console.log den korrekten Wert anzeigt? Wenn Sie also var url = globals.DB_URL vor Zeile 37 und 'console.log (url);' erhalten Sie das gleiche Ergebnis? – uglycode

Antwort

1

Die Frage ist, mit  var mongoClient = mongodb.mongoClient; sollte es mit einem Kapital M sein:

 var mongoClient = mongodb.MongoClient;

Verwandte Themen