nodejs中exports与module.exports的区别详细介绍
如果模块是一个特定的类型就用Module.exports。如果模块是一个典型的“实例化对象”就用exports。
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
在另一个文件引用 代码如下:
var rocker = require('./rocker.js');
rocker.name();
其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports
所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。
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方法
module.exports = function(name, age) {
this.name = name;
this.age = 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.name = function() {
console.log('My name is Lemmy Kilmister');
};
同样,exports是这样的,代码如下:
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
请注意,这两种结果并不想同。前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的“实例化对象”改变成一个类型。
我们只需知道三点就知道 exports 和 module.exports 的区别了:
exports
是指向的module.exports
的引用module.exports
初始值为一个空对象{}
,所以exports
初始值也是{}
require()
返回的是module.exports
而不是exports
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);
return;
} else {
conn.query(sql, function (error, results, fields) {
for (var i = 0; i < results.length; i++) {
console.info("%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);
return;
} else {
conn.query(sql, param, function (error, results, fields) {
for (var i = 0; i < results.length; i++) {
console.info("%d\t%s\t%s", results[i].id, results[i].name, results[i].pwd);
}
callback(error, results, fields);
});
//回调后要释放连接
conn.release();
}
});
}; //作为对象导出
module.exports = db;
/**
* Created by Uno on 2016/7/27.
*/
//台区电压曲线
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: '配电电压曲线'});
};
nodejs中exports与module.exports的区别详细介绍的更多相关文章
- php中is_null,empty,isset,unset 的区别详细介绍
is_null, empty, isset, unset 我们先来看看这4个函数的描述. isset 判断变量是否已存在(配置)unset 把变量删除(释放)掉empty 判断变量是否为空is_nul ...
- 在C和C++中struct与typedef struct的区别详细介绍
c中测试code struct Cmstruct { int c; } Cm; // Cm是一个变量 typedef struct MyStruct //这里的 Mystruct 可以省略 { int ...
- nodejs模块中exports和module.exports的区别
通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名')去获取:核心 ...
- 【nodejs】exports 和 module.exports 的区别
require 用来加载代码,而 exports 和 module.exports 则用来导出代码.但很多新手可能会迷惑于 exports 和 module.exports 的区别,为了更好的理解 e ...
- Node.js中exports与module.exports的区别
原文:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html 你肯定对Node.js模块中用来创建函数的exports对象很 ...
- Node.js 中 exports 和 module.exports 的区别
每一个模块中都有一个 module 对象, module 对象中有一个 exports 对象 我们可以把需要导出的成员都放到 module.exports 这个接口对象中,也就是 module.exp ...
- node.js模块中exports和module.exports的区别
Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. CommonJS规范规定 ...
- nodejs中的exports和module.exports
module是随文件而生的全局变量,它有exports属性,这个属性默认是一个空的字典. node的设计者画蛇添足有定义了一个exports全局变量,export指向module.exports所指向 ...
- exports与module.exports的区别
nodejs有自己的模块系统,分为文件模块和内置模块.webpack是运行在node环境中,在学习vue-cli的webpack配置的时候, 发现有的文件模块: exports.fun1=functi ...
随机推荐
- App启动页倒计时功能
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6753418.html 示例代码采用 RxJava + RxLifecycle + Data-Binding ...
- git远程库代码版本回滚方法
最近使用git时, 造成了远程库代码需要回滚到之前版本的情况,为了解决这个问题查看了很多资料. 问题产生原因: 提交了错误的版本到远程库. 以下是解决的方法, 供大家参考: 1.对本地代码库进行回滚 ...
- Vue+axios 实现http拦截及路由拦截
现如今,每个前端对于Vue都不会陌生,Vue框架是如今最流行的前端框架之一,其势头直追react.最近我用vue做了一个项目,下面便是我从中取得的一点收获. 基于现在用vue+webpack搭建项目的 ...
- HNOI2017 滚粗记
这次HNOI,感觉自己收获了很多啊,高一的蒟蒻,也就是去历练一番,长长见识吧.. $day0$ 上午做了一道斜率优化的题,下午好像在颓??晚上也不想复习了,看了会电视,$12$点才睡.. $day1$ ...
- iOS开发 - Swift实现清除缓存功能
前言: 开发移动应用时,请求网络资源是再常见不过的功能.如果每次都去请求,不但浪费时间,用户体验也会变差,所以移动应用都会做离线缓存处理,其中已图片缓存最为常见. 但是时间长了,离线缓存会占用大量的手 ...
- [Monkey King]
题目描述 在一个森林里住着N(N<=10000)只猴子.在一开始,他们是互不认识的.但是随着时间的推移,猴子们少不了争斗,但那只会发生在互不认识(认识具有传递性)的两只猴子之间.争斗时,两只猴子 ...
- thinkphp 框架中的一部分方法解析
1 thinkphp 框架 中判断输入的数值和数据库中的数值是否一致 首先 需要在view文件夹下建一个模板 名为zhuce.html <html> <head> &l ...
- Jdk1.6 JUC源码解析(1)-atomic-AtomicXXX
转自:http://brokendreams.iteye.com/blog/2250109 功能简介: 原子量和普通变量相比,主要体现在读写的线程安全上.对原子量的是原子的(比如多线程下的共享变量i+ ...
- React入门---开始前的准备(上)-2
开始前准备: 1.安装配置nodeJs(nodeJS官网) 检查安装成功: node -v npm -v 2.使用NPM配置React开发环境 (1). 创建项目文件夹(创建文件夹时,文件夹名不要起为 ...
- 每天一道Java题[6]
题目 String字符串怎么转换为Date,Date又怎么转换成String字符串 解答 String->Date 主要用到类SimpleDateFormat及其抽象父类DateFormat中的 ...