Node.js module.exports的目的是什么,你如何使用它?
我似乎无法找到任何关于此的信息,但它似乎是Node.js的一个相当重要的部分,因为我经常在源代码中看到它.
根据Node.js文档:
模
对当前的参考
module.特别module.exports是与exports对象相同.有关src/node.js更多信息,请参阅
但这并没有真正帮助.
究竟module.exports做了什么,一个简单的例子是什么?
Javascript是通过引用传递还是通过值传递?以下是Javascript:Good Parts的示例.我my对矩形函数的参数非常困惑.它实际上是undefined在函数内部重新定义的.没有原始参考.如果我从函数参数中删除它,则内部区域功能无法访问它.
是关闭吗?但是没有返回任何函数.
var shape = function (config) {
var that = {};
that.name = config.name || "";
that.area = function () {
return 0;
};
return that;
};
var rectangle = function (config, my) {
my = my || {};
my.l = config.length || 1;
my.w = config.width || 1;
var that = shape(config);
that.area = function () {
return my.l * my.w;
};
return that;
};
myShape = shape({
name: "Unhnown"
}); …Run Code Online (Sandbox Code Playgroud) 在此页面(http://docs.nodejitsu.com/articles/getting-started/what-is-require)上,它声明"如果要将导出对象设置为函数或新对象,则必须使用module.exports对象."
我的问题是为什么.
// right
module.exports = function () {
console.log("hello world")
}
// wrong
exports = function () {
console.log("hello world")
}
Run Code Online (Sandbox Code Playgroud)
我console.log结果(result=require(example.js)),第一个是[Function]第二个{}.
你能解释一下背后的原因吗?我在这里阅读帖子:在Node.js中的module.exports vs exports.它很有帮助,但没有解释它以这种方式设计的原因.如果直接退回出口参考会有问题吗?
我想要实现的是创建一个包含多个函数的模块.
module.js:
module.exports = function(firstParam) { console.log("You did it"); },
module.exports = function(secondParam) { console.log("Yes you did it"); },
// This may contain more functions
Run Code Online (Sandbox Code Playgroud)
main.js:
var foo = require('module.js')(firstParam);
var bar = require('module.js')(secondParam);
Run Code Online (Sandbox Code Playgroud)
我firstParam遇到的问题是,它是一个对象类型,secondParam是一个URL字符串,但是当我有它时,它总是抱怨类型错误.
在这种情况下,如何声明多个module.exports?
看着一个随机的源文件中的express为框架NodeJS,有我不理解的代码的两行(这行代码是典型的几乎所有文件的NodeJS).
/**
* Expose `Router` constructor.
*/
exports = module.exports = Router;
Run Code Online (Sandbox Code Playgroud)
和
/**
* Expose HTTP methods.
*/
var methods = exports.methods = require('./methods');
Run Code Online (Sandbox Code Playgroud)
我知道第一段代码 允许文件中的其余函数暴露给NodeJS应用程序,但我不明白它是如何工作的,或者行中的代码意味着什么.
做什么
exports和module.exports实际意味着什么?
我相信第二段代码允许文件中的函数访问methods,但同样,它是如何做到的.
基本上,这些神奇的词是什么:module和exports?
我最近开始研究一个Rails应用程序,它已经有大量的QUnit测试用于测试ember.我被指控使用CI设置应用程序(我决定使用CodeShip).我目前面临的问题是,我运行qunit测试的唯一方法是去http://localhost:3000/qunit.我需要设置一种从命令行运行测试的方法.我做了大量的研究,尝试了至少10种不同的解决方案,但没有成功.
目前我正在尝试使用茶匙,但我没有设法让它工作.任何帮助将非常感激.如果我需要发布有关设置的更多信息,请告诉我.
javascript continuous-integration ruby-on-rails qunit ember.js
我正在尝试将JavaScript的单元测试添加到我的网站中.我使用VS2013,我的项目是一个ASP.NET网站.
基于建议(http://www.rhyous.com/2013/02/20/creating-a-qunit-test-project-in-visual-studio-2010/)我到目前为止做了:
写了简单的测试:
test( "Trainer should have non-empty group", function () {
var group = "group";
var trainer = new Trainer(123, "Name123", group, 123);
EQUAL(trainer.getTrainerGroup(), group);
});
Run Code Online (Sandbox Code Playgroud)注意:我的trainings.js文件包含
function Trainer(id, name, group, level) {
...
var _group = group;
this.getTrainerGroup = function () { return _group ; }
};
Run Code Online (Sandbox Code Playgroud)
当我执行我的测试时,我看到错误:未定义培训师.
它看起来像是我的班级无法识别.我觉得链接文件还不够,但我错过了什么?
请帮助添加对类和运行单元测试的原始文件的引用.
谢谢.
PS问题2:我可以添加对2个文件的引用(我的单元测试还需要一个在另一个文件中的类)吗?怎么样?
我已经阅读了NodeJS网站的详细信息:https://nodejs.org/api/modules.html.我不明白模块是如何工作的,创建模块的最小步骤是什么,以及npm如何帮助我.
我该如何创建模块?
我如何使用模块?
把它放在npm上意味着什么?
注意:这是一个自我回答的问题,目的是将知识作为规范分享.
我正在编写一个nodejs模块,我需要将主文件中的变量数据传递给函数,我这样做:
var region;
var api_key;
exports.region = region;
exports.api_key = api_key;
module.exports = {
getSummonerId: function(sum, callback) {
var summoners = {};
var summoner = sum.replace(/\s+/g, '');
request("https://na.api.pvp.net/api/lol/"+region+"/v1.4/summoner/by-name/"+summoner+"?api_key="+api_key, function(error, response, body) {
summoners[summoner] = JSON.parse(body);
callback(summoners[summoner][summoner].id);
});
}
}
Run Code Online (Sandbox Code Playgroud)
并在主文件中:
var lol = require('./apiwrapper.js');
lol.api_key = "example";
lol.region = "las";
lol.getChampions(function(data) {
console.log(data);
})
Run Code Online (Sandbox Code Playgroud)
但是从apiwrapper.js那两个变量值总是" 未定义 ".
有人能指出我正确的方向吗?
提前致谢.
我正在使用node.js迈出第一步,显然我尝试做的第一件事就是从模块中导出一些数据,所以我尝试了这个简单的例子:
dummy.js:
var user = "rally";
module.exports = {
user:user
};
Run Code Online (Sandbox Code Playgroud)
而不是从这样的不同文件中要求它:
var dummy = require('./dummy.js');
console.log(dummy.user); // rally
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,每件事都有效,但现在我潜入了代码,在模块的开头有这个定义:
module.exports = function(passport,config, mongoose) {}
Run Code Online (Sandbox Code Playgroud)
我不明白它的含义是什么,我怎么能用它.只是为了试图理解我在这个抽象函数中定义了一些变量但是无法从任何其他文件中获取它们的值.任何想法如何从像这样定义的模块中导出变量..?所以例如我可以要求这个模块并获取"Dummy"变量并在不同的文件中使用它
module.exports = function(passport,config, mongoose) {
var dummy = "Dummy";
}
Run Code Online (Sandbox Code Playgroud) javascript ×8
node.js ×7
module ×2
qunit ×2
commonjs ×1
ember.js ×1
export ×1
express ×1
reference ×1
unit-testing ×1