一、npm安装区分
- 安装速度
- npm与cnpm是同步安装,较慢
- yarn异步安装,较快
- 安装选项:
- -g:全局安装
- -D:项目安装(开发需要)
- -S:项目安装(生产需要)
二、模块化
所谓模块化,即在一个js文件中引入另一个js文件,各个文件都有自己的作用域,所以在模块化时,需要遵循一定的规范:
1. 模块化规范库
- 前端的模块化有
- require.js(AMD)
- sea.js(CMD)
- 后端的模块化:
1.引入:require
2.暴露:module.exports exportsglobal(数据无法独立,易被覆盖,故不常用)
3.标识符:module
2.node.js模块化
加入main.js要引入两个js文件1.js和2.js:
- 引入
const m1=require('1.js')
const m2=require('2.js')
2.暴露
在1.js和2.js中(a为各自作用域内的常量):
exports.a=a
3.在main.js中即可用两个js文件各自的a了。
3.export与module.export区别
当export与module.export同时存在时,以module.export为主
module.export={b:200}
module.export一旦赋值,对象的引用就发生了改变,不再指向原来的module,而export的暴露就是指向原来的module,就不再生效。
所以以后在暴露时直接使用module.export={a:111,b:222}
即可
三、包
- 把一些模块zhen整合在一个文件里面就叫包,包又分为
1.系统模块包
:安装时已经放在c盘
2.第三方的包
,一般放在node_modules文件夹
中
3.自定义的包 - 包有以下特性:
1.根目录一定要有package.json文件
(初始化,使用命令npm init -y
)- name:包名
- version版本号
- main
入口文件
(package.js文件中查看)
2.src文件:放一些源码
3.doc文件:说明文档(或者read.md)
4.test文件:测试文件
2.包的引入:
const calc=require('./calc.js')
注意:node_modules中不需要./
但是自定义包需要
3.包的使用
首先初始化包的package.json配置文件
npm init -y
- 1.js和2.js中包含方法add和方法sub,首先,1.js和2.js中暴露方法:
module.exports=(x,y)=>{x+y}
- 包中index.js引入1.js和2.js且暴露add,sub方法
const add=require('./1.js')
const add=require('./2.js')
module.exports={
add,
sub
}
- main.js引入入口文件index.js所在包即可用方法了
const m=require('./calc')
注意:入口函数index.js一定要在package.js中配置对,否则包无法引用
四、中间件
1.中间件的几个特性
- 中间件是一个普通函数
- 该函数有三个主要参数:req,res,next
- 需要使用use执行
- 要按照先后顺序执行
- 中间件的的req时共享的
- 中间件想要执行,上一个中间件必须执行next
2.定义一个中间件
1.定义
function rizhi(req,res,next){ //定义中间件
let data=req.url+'___'+req.method
fs.appendFile(path.join(__dirname,'./中间件日志/1.txt'),data,err=>{
if(err) return console.log(err.message)
console.log('记录成功')
next() //不next就不会继续执行中间件以下的内容
})
}
2.注册
然后在需要使用中间件的代码前面注册中间件即可,注意中间件位置一定要对
app.use(rizhi)
3.模块化中间件
将中间件写为模块,然后在使用时引入即可
- 表单中间件实例
//定义
function biaodan(req,res,next){
let str = ''
req.on('data',(chunk)=>{
str+=chunk //str为data数据chunk块的拼加
})
req.on('end',()=>{
req.body=querystring.parse(str.toString()) //querystring.parse()方法将字符串转换为对象
next()
})
}