博客
关于我
Node:模块
阅读量:340 次
发布时间:2019-03-04

本文共 2391 字,大约阅读时间需要 7 分钟。

核心模块

描述

Node为JavaScript提供了很多服务器级别的API,这些API绝大多数都被包装到了一个具名的核心模块中。例如文件操作的fs核心模块,http服务构建的http模块,path路径操作模块,os操作系统信息模块。。。。
这些核心模块在使用时必须通过require()来加载模块

NodeJs API文档:

实例:以fs模块为例

读取文件

//使用reqire方法加载fs核心模块var fs=require('fs')//读取文件fs.readFile('./helloworld.txt',function(errir,data){   	console.log(data)})

介绍:

fs是file-system的简写,是文件系统的意思在node中如果想要进行文件操作,就必须引入fs这个模块在这个模块中提供了所有文件操作的相关apireadFile(path,callback)读取文件的函数path是要读取的文件路径callback回调函数:	参数一:error  参数二:data如果读取成功error就是null,data就是文件内的数据如果读取失败error就是错误对,data就是undefined

结果:

在这里插入图片描述
文件存储的都是2进制数据,返回的是16进制(2进制转为了16进制)
可以通过toString方法转换为正常的文字

console.log(data.toString())

写文件

//使用reqire方法加载fs核心模块var fs=require('fs')//写文件fs.writeFile('./helloworld.txt','你好,世界',function(error){   	console.log("文件写入成功")})
writeFile(path,data,callback)path文件路径,data要写入的内容,callback回调函数回调函数参数error,文件写入成功error是null,文件写入失败error是错误对象

自定义模块

描述:

我们自己写.js文件就是一个模块

实例:加载并执行其它模块

a.js

console.log("a.js开始执行")require('./b.js')var name = "a.js"console.log('name:',name)console.log("a.js执行结束")

b.js

console.log("b.js开始执行")var name = "b.js"console.log("b.js执行结束")

结果:

在这里插入图片描述
注:
1、相对路径必须加 ./
2、node中没有全局作用域,只有模块作用域,作用域中的变量互不影响,也不能调用另一个模块中的函数
3、除了已经定义好的核心模块,自己写的js文件也是模块

模块通信

有时候我们加载另一个模块并不是执行另一个模块中的内容,而是为了使用里面的某个成员
那么如何进行模块间的通信?这里还是依靠require函数

require函数有两个作用:

  • 加载文件模块并执行里面的代码
  • 获得被加载文件模块导出的接口对象

每个文件模块中都提供了一个对象:exports,该对象默认是一个空对象,可以将杨使用的成员写入这个对象

//a.jsconsole.log("a.js开始执行")var obj = require('./b.js')console.log("加法:", obj.add(4, 5))console.log("乘法:", obj.mult(4, 5))console.log("a.js执行结束")//b.jsmodule.exports = {   	add: function(a, b) {   		return a + b	},	mult: function(a, b) {   		return a * b	}}

在这里插入图片描述

如果仅仅是导出一个对象,可以直接 module.exports = 值
例如:

module.exports = 'hello'那么通过require获取的值就是hello

注:module.exports 只能赋值一次,再次赋值会覆盖前面的内容,如果要导出多个对象就用对象的方式

补充:

1、 除了使用module.exports导出外还可以直接`exports=值

这种方式可以重复赋值,但是无论是赋值一次还是赋值多次,当通过require来获取时,都会获取到一个对象。而module.exports 你赋值一个对象,那就得到一个对象,赋值一个字符串那就得到一个字符串

exports.age = 15exports.show = function(){   }....

2、

3、require的加载规则:

  • 优先从缓存加载,可以拿到接口对象但是不会重复加载已经加载过的模块。
//main.jsrequire('./a.js')var b = require('./b.js')console.log("main.js:", b)//a.jsconsole.log("a.js被加载了")var b = require('./b.js')console.log("b.js:", b)//b.jsconsole.log("b.js被加载了")module.exports = "hello Node"

执行main.js

在这里插入图片描述
可以看出b.js中的代码只执行了一次,但是main.js 和 a.js 中都能得到b.js中导出的值

  • 判断模块标识
    • 加载路径形式的模块。 ./ 表示当前 目录不可省略; ../ 上一级目录,不可省略 ; .js 后缀可以省略

    • 核心模块。核心模块已经被编译到2进制文件中,只需要加载名字

    • 第三方模块。通过加载包名的形式加载,第三方包不可能和核心模块名相同

转载地址:http://rlgh.baihongyu.com/

你可能感兴趣的文章
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置自带的stub状态实现活动监控指标
查看>>
nginx配置详解、端口重定向和504
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
Nginx配置限流,技能拉满!
查看>>
Nginx配置静态代理/静态资源映射时root与alias的区别,带前缀映射用alias
查看>>
Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
查看>>
nginx:/usr/src/fastdfs-nginx-module/src/common.c:21:25:致命错误:fdfs_define.h:没有那个文件或目录 #include
查看>>
Nginx:NginxConfig可视化配置工具安装
查看>>
ngModelController
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>