node
一、node模块化与ES6模块化区别
node common.js模块化
- module对象作为模块运行的标识对象,为模块提供信息;
- exports为模块导出引用数据类型时,modulex.exprots与exprots指向的是同一个对象,require导入的是module.exprots导出的对象;
- 同一模块导入后存在模块缓存,后续多次导入从缓存中加载;
- 源模块的引用与导入该模块的引用是同一对象;
- 不建议同时使用module.exports与exports,导出对象使用module.exports,导出变量使用exports。
- require函数可以导入模块、JSON文件、本地文件。模块可以通过一个相对路径从node_modules、本地模块、JSON文件中导出,该路径将针对__dirname变量(如果已定义)或者当前工作目录。
Es6模块化
- es6通过export和import实现模块导出和导入;
- es6 exprot支持导出多个变量,export default 是export的语法糖,便是导出default接口;
- import * as xxx from "xxx.js"导入的是Module对象,包含default接口和其他变量接口;
- 多个模块导入多次,只会执行一次;
- 导出引用数据类型时,导出对象与导入对象指向同一个变量,修改多出变量对象,元对象也会发生变化;
- 导出单个变量建议使用 export default 导出多个变量建议使用 export
二、node中间件
中间件的概念:
在Node.js中,中间件主要是封装所有的Http请求细节处理的方法。一次Http请求通常涵盖了很多的工作(记录日志、ip过滤、查询字符串、请求体解析、Cookie处理…),但是对于Web而言,并不希望接触到这些处理,因此我们需要引入中间件来简化和隔离这些基础设施与业务逻辑之间的细节,让开发者能够关注在业务开发上,以此来提高开发效率。
中间件的行为类似于axios中的拦截器,在正式进入逻辑业务之前可以让拦截器进行处理。
中间件工作模型
中间件机制核心实现4
中间件时从Http请求发起到响应借书过程中的处理方法,通常要对请求和响应进行处理,因此一个基本的中间件形式如下
const middleware = (req, res, next) => {
// TODO
next()
}