2016-04-09 4 views
0

Keine Fragen, die ich auf StackOverflow gefunden habe beantwortet diese Frage oder gab eine Lösung für mein Problem.So verwenden Sie eine Funktion aus einer anderen Datei mit require()

Ich erstelle eine App, um die API von Spotify zu verwenden. Ich bin relativ neu in JavaScript, aber ich bin schon lange Codierer in anderen Sprachen, speziell in OO-Sprachen. Ich versuche, OO-esque Code in meinem Projekt für den Umgang mit der API zu verwenden.

Ich kann nicht richtig verstehen, wie es geht, aber hier ist mein grundlegendes Verständnis. Ich habe den gesamten Code für den Umgang mit der API in einer Datei namens smartspot.js. Innerhalb dieser Datei ist etwas, das dem folgenden ähnelt.

/** 
* Taps into the Spotify API to create a playlist with top songs from artists most like a certain artist. 
* @param {string} _clientId the client ID code given to the user by Spotify. 
* @param {string} _clientSecret the client secret code given to the user by Spotify. 
* @param {string} _redirectUri a Redirect URI that has been white-listed by Spotify. 
* @constructor creates a SmartSpot that can access the Spotify API. 
*/ 
function SmartSpot(_clientId, _clientSecret, _redirectUri) 
{ 
    //initialize the variables (omitted) 
    var clientId = _clientId; 
     clientSecret = _clientSecret; 
    //etc... 

    //various irrelevant variables and functions are ommited. 
    this.foo = function(param) 
    { 
     //does stuff  
    }; 
    //etc... 
} 

Nun, ich glaube, dass function SmartSpot(_clientId, _clientSecret, _redirectUri) ein Konstruktor ist (wie in Sprachen wie Java und C++). Korrigiere mich, wenn ich falsch liege. Also, angenommen, dass es ein Konstruktor ist, muss ich es in einer anderen Datei verwenden: meine Express "Routen" -Datei. Es befindet sich in `routes/index.js '.
Am Anfang der Datei, ich diese jedoch

var SmartSpot = require('../SmartSpot'); //I have also tried require('../Smartspot.js'); 
//later on 
var smartSpot = new SmartSpot(clientId, clientSecret, redirectUri); 

//elsewhere 
smartSpot.foo(); 

setzen, beschwert sich der Compiler mir mir zu sagen:

TypeError: SmartSpot is not a function 
    at Object.<anonymous> 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 
    //etc... 

Was soll ich hier fehlt? Ich benutze IntelliJ für all das, und es schlägt vor, dass ich eine Funktion erstellen muss, so tue ich, und es erstellt den Konstruktor/die Funktion in der Datei index.js. Ich möchte die Dateien trennen, um den Code einfacher zu verstehen und einfacher zu verwenden.

Wenn Sie irgendetwas brauchen, um diese Frage zu beantworten, die ich weggelassen habe, lassen Sie es mich wissen.

+0

Verwenden Sie diese JavaScript-Dateien auf einer HTML-Seite? Wenn ja, können Sie die JS-Dateien mit dem Tag