如何使用require()从另一个文件中使用函数

时间:2016-04-09 00:53:42

标签: javascript node.js express spotify

我在StackOverflow上找到的任何问题都没有回答这个问题或解决了我的问题。

我正在创建一个使用Spotify API的应用程序。我是一个相对较新的JavaScript,但我很长一段时间以来都是其他语言的编码器,特别是OO语言。我正在尝试在我的项目中使用OO-esque代码来处理API。

我可能无法正确理解如何做到这一点,但这是我的基本理解。 我在一个名为smartspot.js的文件中拥有处理API的所有代码。该文件内部的内容类似于以下内容。

/**
 * 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...
}

现在,我相信function SmartSpot(_clientId, _clientSecret, _redirectUri)是一个构造函数(就像Java和C ++这样的语言)。如果我错了,请纠正我。因此,假设构造函数,我需要在另一个文件中使用它:我的快速“路由”文件。它位于`routes / index.js' 在文件的顶部,我把这个

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

//elsewhere
smartSpot.foo();

然而,编译器抱怨我告诉我:

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...

我在这里缺少什么?我正在使用IntelliJ,这表明我需要创建一个函数,所以我这样做,并在index.js文件中创建构造函数/函数。我想分离文件,使代码更容易理解,更易于使用。

如果您需要回答我遗漏的问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

感谢Alexander Max的一些帮助,环顾四周之后,我注意到我的很多其他文件都有module.exports = Something;
事实证明这是解决方案。我将module.exports = SmartSpot;放在SmartSpot.js文件的底部,并将var SmartSpot = require('../SmartSpot');放在另一个文件的顶部。现在,文件被正确解释,我可以使用路径文件中的函数。