如何使用 require() 使用另一个文件中的函数
How to use a function from another file using require()
我在 Whosebug 上找到的任何问题都没有回答这个问题或为我的问题提供解决方案。
我正在创建一个应用程序来使用 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++ 等语言中)。如果我错了,请纠正我。因此,假设它 是 构造函数,我需要在另一个文件中使用它:我的 express "routes" 文件。它位于`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
文件中创建了 constructor/function。我想把文件分开,让代码更容易理解和使用。
如果您需要回答我遗漏的这个问题,请告诉我。
多亏了 Alexander Max 的帮助,环顾四周后,我发现我的很多其他文件都有 module.exports = Something;
。
结果证明这是解决方案。我将 module.exports = SmartSpot;
放在 SmartSpot.js
文件的底部,并将 var SmartSpot = require('../SmartSpot');
放在另一个文件的顶部。现在,该文件已被正确解释,我可以从我的路由文件中使用它的功能。
我在 Whosebug 上找到的任何问题都没有回答这个问题或为我的问题提供解决方案。
我正在创建一个应用程序来使用 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++ 等语言中)。如果我错了,请纠正我。因此,假设它 是 构造函数,我需要在另一个文件中使用它:我的 express "routes" 文件。它位于`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
文件中创建了 constructor/function。我想把文件分开,让代码更容易理解和使用。
如果您需要回答我遗漏的这个问题,请告诉我。
多亏了 Alexander Max 的帮助,环顾四周后,我发现我的很多其他文件都有 module.exports = Something;
。
结果证明这是解决方案。我将 module.exports = SmartSpot;
放在 SmartSpot.js
文件的底部,并将 var SmartSpot = require('../SmartSpot');
放在另一个文件的顶部。现在,该文件已被正确解释,我可以从我的路由文件中使用它的功能。