exports 和 module.exports 用法的区别

你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块。例如:(假设这是rocker.js文件)
exports.name = function() {
console.log('My name is Lemmy Kilmister');
在另一个文件中你这样引用
var rocker = require('./rocker.js');
rocker.name(); // 'My name is Lemmy Kilmister'
那到底Module.exports是什么呢?它是否合法呢?
其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。
所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。
修改rocker.js如下:
module.exports = 'ROCK IT!';
exports.name = function() {
console.log('My name is Lemmy Kilmister');
&再次引用执行rocker.js
var rocker = require('./rocker.js');
rocker.name(); // TypeError: Object ROCK IT! has no method 'name'
发现报错:对象&ROCK IT!&没有name方法
rocker模块忽略了exports收集的name方法,返回了一个字符串&ROCK IT!&。由此可知,你的模块并不一定非得返回&实例化对象&。你的模块可以是任何合法的javascript对象--boolean, number, date, JSON, string, function, array等等。
你的模块可以是任何你设置给它的东西。如果你没有显式的给Module.exports设置任何属性和方法,那么你的模块就是exports设置给Module.exports的属性。
下面例子中,你的模块是一个类:
module.exports = function(name, age) {
this.name =
this.age =
this.about = function() {
console.log(this.name +' is '+ this.age +' years old');
可以这样应用它:
var Rocker = require('./rocker.js');
var r = new Rocker('Ozzy', 62);
r.about(); // Ozzy is 62 years old
下面例子中,你的模块是一个数组:
module.exports = ['Lemmy Kilmister', 'Ozzy Osbourne', 'Ronnie James Dio', 'Steven Tyler', 'Mick Jagger'];
可以这样应用它:
var rocker = require('./rocker.js');
console.log('Rockin in heaven: ' + rocker[2]); //Rockin in heaven: Ronnie James Dio
现在你明白了,如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的&实例化对象&就用exports。
给Module.exports添加属性类似于给exports添加属性。例如:
module.exports.name = function() {
console.log('My name is Lemmy Kilmister');
同样,exports是这样的
exports.name = function() {
console.log('My name is Lemmy Kilmister');
请注意,这两种结果并不想同。前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的&实例化对象&改变成一个类型。
阅读(...) 评论()nodejs中exports与module.exports的区别详细介绍
看了好多篇关于exports与module.exports的区别的介绍,好多感觉讲的都不够准确,最后才明白两者用法的区别为:如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的&实例化对象&就用exports。
你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块。例如:(假设这是rocker.js文件)&
exports.name = function() {&
console.log('My name is Lemmy Kilmister');&
在另一个文件中你这样引用&
var rocker = require('./rocker.js');&
rocker.name(); // 'My name is Lemmy Kilmister'&
那到底Module.exports是什么呢?它是否合法呢?&
其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。
所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。
修改rocker.js如下:&
module.exports = 'ROCK IT!';&
exports.name = function() {&
console.log('My name is Lemmy Kilmister');&
再次引用执行rocker.js&
var rocker = require('./rocker.js');&
rocker.name(); // TypeError: Object ROCK IT! has no method 'name'&
发现报错:对象&ROCK IT!&没有name方法&
rocker模块忽略了exports收集的name方法,返回了一个字符串&ROCK IT!&。由此可知,你的模块并不一定非得返回&实例化对象&。你的模块可以是任何合法的javascript对象--boolean, number, date, JSON, string, function, array等等。
你的模块可以是任何你设置给它的东西。如果你没有显式的给Module.exports设置任何属性和方法,那么你的模块就是exports设置给Module.exports的属性。
下面例子中,你的模块是一个类:&
module.exports = function(name, age) {&
this.name =&
this.age =&
this.about = function() {&
console.log(this.name +' is '+ this.age +' years old');&
可以这样应用它:&
var Rocker = require('./rocker.js');&
var r = new Rocker('Ozzy', 62);&
r.about(); // Ozzy is 62 years old&
下面例子中,你的模块是一个数组:&
module.exports = ['Lemmy Kilmister', 'Ozzy Osbourne', 'Ronnie James Dio', 'Steven Tyler', 'Mick Jagger'];&
可以这样应用它:&
var rocker = require('./rocker.js');&
console.log('Rockin in heaven: ' + rocker[2]); //Rockin in heaven: Ronnie James Dio&
现在你明白了,如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的&实例化对象&就用exports。
给Module.exports添加属性类似于给exports添加属性。例如:&
module.exports.name = function() {&
console.log('My name is Lemmy Kilmister');&
同样,exports是这样的&
exports.name = function() {&
console.log('My name is Lemmy Kilmister');&
请注意,这两种结果并不想同。前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的&实例化对象&改变成一个类型。深入理解node exports和module.exports区别
来源:易贤网&& 阅读:43 次&&日期:
温馨提示:易贤网小编为您整理了“深入理解node exports和module.exports区别”,方便广大网友查阅!
下面小编就为大家带来一篇深入理解node exports和module.exports区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。
我们只需知道三点即可知道 exports 和 module.exports 的区别了:
1.exports 是指向的 module.exports 的引用
2.module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {}
3.require() 返回的是 module.exports 而不是 exports
• 我们通过
var name ='nswbmw';&
&exports.name =&
&exports.sayName =function(){&
& console.log(name);&
给 exports 赋值其实是给 module.exports 这个空对象添加了两个属性而已,上面的代码相当于:
var name ='nswbmw';&
module.exports.name =&
module.exports.sayName =function(){&
& console.log(name);&
以上这篇深入理解node exports和module.exports区别就是小编分享给大家的全部内容了,希望能给大家一个参考
更多信息请查看
【】&&&&&【点此处查询各地各类考试咨询QQ号码及交流群】
易贤网手机网站地址:
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
相关阅读 & & &
&nbsp&nbsp&nbsp &nbsp&nbsp&nbsp会员注册
本站不参与评论!()
自觉遵守:爱国、守法、自律、真实、文明的原则
尊重网上道德,遵守中华人民共和国各项有关法律法规
严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的评论
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
您在本站发表的评论,本站有权保留、转载、引用或者删除
参与本评论即表明您已经阅读并接受上述条款NodeJs(1)
nodejs的模块机制是导入和导出:
导入用的是require
例如:require('fs') & require('Express')
导出:exports和module.exports
首先说明:
exports&是指向的&module.exports&的引用module.exports&初始值为一个空对象&{},所以&exports&初始值也是&{}require()&返回的是&module.exports&而不是&exports
即module.exports是一个对象,可以有属性和方法,引用时,直接对象.方法即可
* Created by Uno on .
var mysql = require('mysql');
var config = require('./dbConfig');
var pool = mysql.createPool(config.dbSetting);
var db = {};
db.query = function (sql, callback) {
pool.getConnection(function (err, conn) {
if (err) {
callback(err, null, null);
conn.query(sql, function (error, results, fields) {
for (var i = 0; i & results. i++) {
(&%d\t%s\t%s&, results[i].id, results[i].name, results[i].pwd);
callback(error, results, fields);
//回调后要释放连接
conn.release();
db.query_param = function (sql, param, callback) {
pool.getConnection(function (err, conn) {
if (err) {
callback(err, null, null);
conn.query(sql, param, function (error, results, fields) {
for (var i = 0; i & results. i++) {
(&%d\t%s\t%s&, results[i].id, results[i].name, results[i].pwd);
callback(error, results, fields);
//回调后要释放连接
conn.release();
//作为对象导出
module.exports =
调用时直接db.query()即可
而exports更倾向的是方法的定义
* Created by Uno on .
//台区电压曲线
exports.tqdy = function (req, res) {
res.render('echart/tqdy', {title: '台区电压曲线'});
//台区功率曲线
exports.tqgl = function (req, res) {
res.render('echart/tqgl', {title: '台区功率曲线'});
//台区负载率曲线
exports.fzl = function (req, res) {
res.render('echart/fzl', {title: '台区负载率曲线'});
//非台区变电电压曲线
exports.bddy = function (req, res) {
res.render('echart/bddy', {title: '变电电压曲线'});
//非台区配电电压曲线
exports.pddy = function (req, res) {
res.render('echart/pddy', {title: '配电电压曲线'});
如果对exports直接赋值(即让exports指向另外的对象)则不能用require后的方法,因为require返回的始终是module.exports的对象
即不能写成
exports = function(r) {
return r * r * Math.PI;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:18441次
积分:1342
积分:1342
排名:千里之外
原创:118篇
转载:12篇
(4)(9)(10)(1)(2)(5)(10)(68)(23)}

我要回帖

更多关于 module.exports 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信