Node.js-json-模块化-全局对象-fs-服务-Buffer
1 node基础知识点
1.1介绍
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个应用程序。
官方网址 https://nodejs.org/en/,中文站 http://nodejs.cn/
node:是一个运行JS的环境。
1.2 作用
- 解析运行 JS 代码
- 操作系统资源,如内存、硬盘、网络
1.3 应用场景
- APP 接口服务 一个接口就是一个地址
- 网页聊天室。
- 动态网站, 个人博客, 论坛, 商城等
- 后端的Web服务,例如服务器端的请求(爬虫),代理请求(跨域)
- 前端项目打包(webpack, gulp)
1.4 相关命令
1 打开 win+r cmd 或者地址输入 cmd回车
2 查看node版本: node -v
进入node环境: node 回车
退出环境: ctr+c
自动查找文件: tab
3 运行JS文件 node 01-my.js:运行当前目录下的 01-my.js
4 清屏:cls
5 显示当前的文件列表 dir
6 切换盘符: c:
7 进入到上级目录: cd..
进入到one文件夹: cd one
注意
在 nodejs 环境下,不能使用 BOM 和 DOM ,也没有全局对象 window,全局对象的名字叫 global
2 json
javascript object notation:对象表示方法,对象标记,数据交换格式
json:javascript object notation js对象的表达方式
json作用:实现前后端之间的通讯所传递的一种数据格式,类似于对象
与对象相同点:json与对象都是有键值对。{} 【】
与对象不同点:
① json属性必须加上双引号
② json最后一个属性结束时,不要加逗号
③ json的属性值不能是函数,NaN,undefined
④ json是前后端通讯时的数据之一,对象是通过类实例化出来的。
[
{
"useName":"xixi",
"age":123
}
]
对象与json是可以相互转换的,创建后缀为.js的文件
const obj = {
a:1,
b:2
}
stringifg:将对象转换为json字符串
const str = JSON.stringify(obj);
console.log(str); //{"a":1,"b":2}
parse:json字符串转换为json对象
const obj2 = JSON.parse(str);
console.log(obj2) //{ a: 1, b: 2 }
3 模块化
3.1 模块化介绍
模块化指的就是将一个大的功能拆分为一个一个小的模块,通过不同的模块的组合来实现一个大功能。
- 在node中一个 js 文件就是一个模块
- 模块内部代码对于外部来说都是不可见的,可以通过两种方式向外部暴露
模块有:内置模块、自定义模块、第三方模块
3.2 引入与导出
模块内对外暴露数据注意以下几点:
1)模块内如果没有暴露数据,引人模块的时候会得到一个空对象。
2)module.exports
可以暴露任意数据。
创建并暴露模块,新建mo.js
const a = 12;
module.exports = a;
导出模块,新建index.js,并在
//mo1.js当中的 module.exports是什么那么mo1就是什么!!
const mo1 = require("./module/mo1.js")
console.log(mo1);//把a的值赋值给mo1 值为12
3.3 引入模块特点
① mo1.js当中的 module.exports是什么那么mo1就是什么
② 后缀.js是可以省略的
注意:node_modules一般存放的是第三方的模块,自定义的模块一般不会放置到该文件夹中,文件名必须叫node_modules。
③ 当js文件不在node_modules文件夹下,是不允许省略前缀的。若没有在当前文件夹找到,则会自动向上上级目录中的 node_modules 查找,一直到根目录。
const mo1 = require("module/mo1");// Cannot find module 'module/mo1'
创建node_modules文件夹,在此文件夹下创建文件mo1.js
const mo1 = require("mo1")
console.log(mo1) //12
④ 当省略.js 会有两种含义:
i 会使用当前文件.js (第一种情况优先被选择)
ii 是一个json文件
iii 会使用当前文件下的index.js
index.js是可以省略不写的。当你只指定文件夹时,默认引入index.js
创建mo2文件夹,在mo2下创建index.js文件,暴露此文件
module.exports = "module->mo->index.js"
引入文件
const mo2 = require("./module/mo2/index")
console.log(mo2) //module->mo->index.js
const mo2 = require("./module/mo2")
console.log(mo2) //module->mo->index.js
⑤ 如果要更改默认值index,将默认值 index.js 指定为 home.js,在package.json中写入home.js
新建mo3文件夹,在文件夹中创建index.js ,home,js , package.json
暴露的文件分别为
module.exports = "module->mo3->index.js"
module.exports = "module->mo3->home.js";
{
"main": "home.js"
}
则引入的文件则更改了默认值
const mo3 = require("./module/mo3")
console.log(mo3) //module->mo3->home.js
⑤ 导入的是对象
const d = 4;
const e = 5;
const f = 6;
module.exports = {
a:1,
b:2,
c:3,
d,
e,
f,
run(){
console.log("run执行啦",this.a,this.b,this.c)
}
}
const mo4 = require("./module/mo4");
console.log(mo4); //{ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, run: [Function: run] }
mo4.run(); //run执行啦 1 2 3
// 使用对象解构赋值
const {
a,b,run} = require("./module/mo4");
console.log(a,b);//1 2
run(); //run执行啦 undefined
⑥ 如果直接给module.exports增加属性
module.exports.a = 1;
module.exports.b = 2;
module.exports.c = 3;
module.exports.d = 4;
module.exports.e = 5;
module.exports.run = function () {
console.log(this);
}
const mo5 = require("./module/mo5");
console.log(mo5