我在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
文件中创建构造函数/函数。我想分离文件,使代码更容易理解,更易于使用。
如果您需要回答我遗漏的问题,请告诉我。
答案 0 :(得分:1)
感谢Alexander Max的一些帮助,环顾四周之后,我注意到我的很多其他文件都有module.exports = Something;
。
事实证明这是解决方案。我将module.exports = SmartSpot;
放在SmartSpot.js
文件的底部,并将var SmartSpot = require('../SmartSpot');
放在另一个文件的顶部。现在,文件被正确解释,我可以使用路径文件中的函数。