node.js中exports与module.exports

简介:

    你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块。例如:(假设这是rocker.js文件)

1
2
3
exports.name =  function () {
     console.log( 'My name is Lemmy Kilmister' );
};

    在另一个文件中你这样引用

1
2
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如下:

1
2
3
4
module.exports =  'ROCK IT!' ;
exports.name =  function () {
     console.log( 'My name is Lemmy Kilmister' );
};

    再次引用执行rocker.js

1
2
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的属性。


    下面例子中,你的模块是一个类:

1
2
3
4
5
6
7
module.exports =  function (name, age) {
     this .name = name;
     this .age = age;
     this .about =  function () {
         console.log( this .name + ' is ' this .age + ' years old' );
     };
};

    可以这样应用它:

1
2
var  Rocker = require( './rocker.js' ); var  r =  new  Rocker( 'Ozzy' , 62);
r.about();  // Ozzy is 62 years old


    下面例子中,你的模块是一个数组:

1
module.exports = [ 'Lemmy Kilmister' 'Ozzy Osbourne' 'Ronnie James Dio' 'Steven Tyler' 'Mick Jagger' ];

    可以这样应用它:

1
2
var  rocker = require( './rocker.js' );
console.log( 'Rockin in heaven: '  + rocker[2]);  //Rockin in heaven: Ronnie James Dio


    现在你明白了,如果你想你的模块是一个特定的类型就用module.exports。如果你想的模块是一个典型的“实例化对象”就用exports。


    给module.exports添加属性类似于给exports添加属性。例如:

1
2
3
module.exports.name =  function () {
     console.log( 'My name is Lemmy Kilmister' );
};

    同样,exports是这样的

1
2
3
exports.name =  function () {
     console.log( 'My name is Lemmy Kilmister' );
};


    请注意,这两种结果并不相同。前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的“实例化对象”改变成一个类型。










本文转自 iampomelo 51CTO博客,原文链接:http://blog.51cto.com/iampomelo/1674047,如需转载请自行联系原作者
目录
相关文章
|
21天前
|
JSON JavaScript 前端开发
❤Nodejs 第九章(token身份认证和express-jwt的安装认识)
【4月更文挑战第9天】Node.js第九章介绍了Token身份认证,特别是JWT(JSON Web Token)作为跨域认证的解决方案。JWT由Header、Payload和Signature三部分组成,用于在客户端和服务器间安全传输用户信息。前端收到JWT后存储在localStorage或sessionStorage中,并在请求头中发送。Express-JWT是一个中间件,用于解析JWT。基本用法包括设置secret和algorithms。注意安全问题,避免混合使用不同算法以防止降级攻击。
40 0
|
1月前
|
JavaScript Windows
Win7内网安装高版本的Node方法,亲测有效node-v16.16.0
Win7内网安装高版本的Node方法,亲测有效node-v16.16.0
62 0
|
2月前
|
JavaScript Linux 数据安全/隐私保护
node内网安装npm私服以及依赖包上传发布verdaccio
node内网安装npm私服以及依赖包上传发布verdaccio
99 1
|
2天前
|
移动开发 JavaScript 前端开发
为了学习vue3,安装nvm进行node的多版本管理
为了学习vue3,安装nvm进行node的多版本管理
11 2
|
3天前
|
资源调度 jenkins 持续交付
jenkins 自动安装nodejs16.16.0版本报错处理
jenkins 自动安装nodejs16.16.0版本报错处理
13 0
|
14天前
|
JavaScript 前端开发 Linux
Node.js安装与配置
`Node.js` 是一个基于 `Chrome V8` 引擎的 `JavaScript` 运行环境,它允许开发者使用 `JavaScript` 编写服务器端代码。以下是 `Node.js` 的安装与配置的详细步骤:
Node.js安装与配置
|
14天前
|
JSON JavaScript 关系型数据库
❤Nodejs 第十六章(Nodejs环境安装和依赖使用)
【4月更文挑战第16天】本文介绍了Node.js环境安装和项目搭建步骤。检查Node.js和npm版本安装核心依赖,如Express(Web应用框架)、MySQL库、CORS(解决跨域问题)、body-parser(解析POST数据)、express-jwt和jsonwebtoken(JWT验证)、multer(文件上传处理)、ws(WebSocket支持),以及可选的dotenv(管理环境变量)和ejs(模板引擎)。完整源码可在Gitee开源项目[nexusapi](https://gitee.com/lintaibai/nexusapi)中找到。
23 0
|
21天前
|
JavaScript Linux Python
Linux 安装 Node.js | NPM
Linux 安装 Node.js | NPM
8 0
|
27天前
node安装常用工具
node安装常用工具
9 0
|
1月前
|
数据采集 JavaScript 前端开发
❤Nodejs 第一章(认识安装)
【4月更文挑战第1天】Nodejs 是一个跨平台的 JavaScript 运行时环境,基于Chrome的V8引擎。它以异步I/O和事件驱动为特点,用于构建高效、可扩展的网络应用。Node.js 使用npm作为包管理工具,拥有大量的模块资源。它适合IO密集型应用,但不适宜CPU密集型任务。其应用场景广泛,包括前端框架、后端服务、爬虫、桌面应用、移动应用、构建工具和CICD流程等。
75 1
❤Nodejs 第一章(认识安装)

相关实验场景

更多