模块化引入

一、npm安装区分

  1. 安装速度
  • npm与cnpm是同步安装,较慢
  • yarn异步安装,较快
  1. 安装选项:
  • -g:全局安装
  • -D:项目安装(开发需要)
  • -S:项目安装(生产需要)

二、模块化

所谓模块化,即在一个js文件中引入另一个js文件,各个文件都有自己的作用域,所以在模块化时,需要遵循一定的规范:

1. 模块化规范库
  • 前端的模块化有
    • require.js(AMD)
    • sea.js(CMD)
  • 后端的模块化:
    1.引入:require
    2.暴露:module.exports exports global(数据无法独立,易被覆盖,故不常用)
    3.标识符:module
2.node.js模块化

加入main.js要引入两个js文件1.js和2.js:

  1. 引入
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()
    })
}

你可能感兴趣的:(模块化引入)