7模块化
7.1模块化概念
小霸王游戏机,卡带与整体可以拆分。编程过程中把大文件拆成独立互相依赖的多个小模块。把复杂的问题拆分为多个小模块。
模块化好处:好处多多,能用就用
模块分类:内置(fs、path、http)自定义(.js文件)第三方模块(既不是官方也不是自己开发的模块)//软件官方,本人,其他人
加载其他模块,会执行被加载模块中的代码。
const custom = require('./custom.js') //加载自定义模块 可以省略.js
const moment = require('moment') //加载第三方模块
模块作用域:在自定义模块中变量、方法、只能在当前模块内被访问。用来防止全集变量的污染
module 对象 ,用此对象来对外暴露块作用域内的,内部有一个exports对象
当使用require()方法导入自定义模块时,得到就是module.exports所指的对象。导入的结果以module.exports为准
默认情况下 exports 和module.exports 指向的同一个对象
exports 和 module.exports 不可混合使用 。require模块中 永远是module.exports
7.2CommJS规范
①在每个模块的内部,module变量代表当前模块
②module变量是一个对象,exports是对外接口
③加载某个模块,其实加载的是module.exports。require 加载对象
7.3 Node.js中模块的三大分类
7.4 npm管理包
第三方模块又叫做包。 包是基于内置模块封装出来的。npm 全球最大的包共享平台
www.npmjs.com registry.npmjs.com
以引入moment包为例
npm install moment //或 npm i moment
装包以后 多了node_modules 同时多了package-lock.json,尽量不要手动修改这两个文件
7.4.1 包的版本号含义
第一位:大版本(底层重构) 第二位:功能版本 (增加功能等) 第三位:Bug修复版本。只要前面的版本号增长了,后面的版本号归零
把node_modules 文件夹添加到git 的.gitignore 文件中
npm init -y //创建package.json 要英文目录,不要包含中文及空格
npm i //一次性根据package.json 安装所有依赖的包
npm uninstall //命令执行成功后,会卸载包,将包从package.json中删除
npm i -D 包名 //将包安装到devDependencies //仅开发时使用到的包
npm i moment@2.22.2 //指定包版本示例
npm config get registry //当前源
npm config set registry=https://registry.npm.taobao.org //换源到淘宝
nrm管理源工具
npm i nrm -g //安装nrm
nrm ls //查看源目录
nrm use taobao //用淘宝源
7.4.2
npm install 如果增加了-g参数,就是将包安装到全局 文件位置为c:\users\sername\AppData\Roaming\npm\node_modules
7.5规范的包结构
7.6了解模块的加载机制
8 express 路由
Express 中路由最简单的方式 挂载到app上
const express = require('express')
const app = express()
app.get('/',(req,res)= > {
console.log('使用了get方法')
})
app.listen(80,() =>{
console.log('http://127.0.0.1')
})
2模块化路由
创建路由模块的.js文件
调用express.Router() 创建路由对象
var express = require('express') //导入express
var router = express.Router() //创建路由对象 ①
router.get('/user/list',function(req,res) {
res.send('Get user list') //挂载获取用户列表的路由 ②
})
router.post('/user/add',function(req,res) {
res.send('Add new user.') //挂载添加用户的路由 ③
})
module.exports = router //向外导出路由对象 ④
导入路由模块
const express = require('express')
const app = express()
const router = require('./03.router')
app.use(router) //函数注册路由模块 use()就是注册全局中间件
//app.use('/api',router) //访问地址加了前缀 /api
app.listen(80,()=> {
console.log('http://127.0.0.1')
})
---------------------------------------------------------
express
1 什么是express:node.js 平台,web开发框架 ,基于http模块封装出来的
学会后可以:web网站服务器、API接口服务器
app.get('/',(req,res)=>{
req.requery //请求参数 是一个对象, get方法 url?后的数据
req.params // 通过:匹配到动态参数
res.send //应答
})
示例
app.get('/user/:id/:username',(req,res)=>{ // :号后面的字符串可以随便写,仅仅是 :号 ,是固定的
console.log(req.params)
res.send(req.params)
})
得到结果 {id:2,username:zs}//请求写的是/user/:2/zs
2 express.static()托管静态资源
const express = require('express')
const app = express()
示例:app.use(express.static('public')) //这样就可以访问public目录中的所有文件了
如果要托管多个静态资源目录 就多用几次上面的示例
express 在指定的静态目录中查找文件,并对外提供资源的访问路径,因此存放静态文件的目录名不会出现在URL中
3挂载路径前缀
app.use('/public',express.static('pbulic')) //这样url中就必须由/public 了
4 nodemon
在编写node.js项目的时候,如果修改了项目的代码,就不需要频繁启动、停止