7模塊化
7.1模塊化概念
小霸王游戲機(jī),卡帶與整體可以拆分。編程過程中把大文件拆成獨(dú)立互相依賴的多個小模塊。把復(fù)雜的問題拆分為多個小模塊。
模塊化好處:好處多多,能用就用
模塊分類:內(nèi)置(fs、path、http)自定義(.js文件)第三方模塊(既不是官方也不是自己開發(fā)的模塊)//軟件官方,本人,其他人
加載其他模塊,會執(zhí)行被加載模塊中的代碼。
const custom = require('./custom.js') //加載自定義模塊 可以省略.js
const moment = require('moment') //加載第三方模塊
模塊作用域:在自定義模塊中變量、方法、只能在當(dāng)前模塊內(nèi)被訪問。用來防止全集變量的污染
module 對象 ,用此對象來對外暴露塊作用域內(nèi)的,內(nèi)部有一個exports對象
當(dāng)使用require()方法導(dǎo)入自定義模塊時(shí),得到就是module.exports所指的對象。導(dǎo)入的結(jié)果以module.exports為準(zhǔn)
默認(rèn)情況下 exports 和module.exports 指向的同一個對象
exports 和 module.exports? 不可混合使用 。require模塊中 永遠(yuǎn)是module.exports
7.2CommJS規(guī)范
①在每個模塊的內(nèi)部,module變量代表當(dāng)前模塊
②module變量是一個對象,exports是對外接口
③加載某個模塊,其實(shí)加載的是module.exports。require 加載對象
7.3 Node.js中模塊的三大分類
7.4 npm管理包
第三方模塊又叫做包。 包是基于內(nèi)置模塊封裝出來的。npm 全球最大的包共享平臺
www.npmjs.com registry.npmjs.com
以引入moment包為例
npm install moment //或 npm i moment
裝包以后 多了node_modules 同時(shí)多了package-lock.json,盡量不要手動修改這兩個文件
7.4.1 包的版本號含義
第一位:大版本(底層重構(gòu)) 第二位:功能版本 (增加功能等)? 第三位:Bug修復(fù)版本。只要前面的版本號增長了,后面的版本號歸零
把node_modules 文件夾添加到git 的.gitignore 文件中
npm init -y? //創(chuàng)建package.json 要英文目錄,不要包含中文及空格
npm i //一次性根據(jù)package.json 安裝所有依賴的包
npm uninstall //命令執(zhí)行成功后,會卸載包,將包從package.json中刪除
npm i -D 包名 //將包安裝到devDependencies //僅開發(fā)時(shí)使用到的包
npm i moment@2.22.2 //指定包版本示例
npm config get registry //當(dāng)前源
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參數(shù),就是將包安裝到全局 文件位置為c:\users\sername\AppData\Roaming\npm\node_modules
7.5規(guī)范的包結(jié)構(gòu)
7.6了解模塊的加載機(jī)制
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模塊化路由
創(chuàng)建路由模塊的.js文件
調(diào)用express.Router() 創(chuàng)建路由對象
var express = require('express') //導(dǎo)入express
var router = express.Router()? ? //創(chuàng)建路由對象 ①
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? ? //向外導(dǎo)出路由對象 ④
導(dǎo)入路由模塊
const express = require('express')
const app = express()
const router = require('./03.router')
app.use(router)? ? ? ? ? ? ? //函數(shù)注冊路由模塊 use()就是注冊全局中間件
? ? //app.use('/api',router) //訪問地址加了前綴 /api
app.listen(80,()=> {
console.log('http://127.0.0.1')
})
---------------------------------------------------------
express
1? 什么是express:node.js 平臺,web開發(fā)框架? ,基于http模塊封裝出來的
學(xué)會后可以:web網(wǎng)站服務(wù)器、API接口服務(wù)器
app.get('/',(req,res)=>{
? req.requery //請求參數(shù) 是一個對象, get方法? url?后的數(shù)據(jù)
? req.params // 通過:匹配到動態(tài)參數(shù)
res.send //應(yīng)答
})
示例
app.get('/user/:id/:username',(req,res)=>{? // :號后面的字符串可以隨便寫,僅僅是 :號 ,是固定的
? console.log(req.params)
res.send(req.params)
})
得到結(jié)果 {id:2,username:zs}//請求寫的是/user/:2/zs
2 express.static()托管靜態(tài)資源
const express = require('express')
const app = express()
示例:app.use(express.static('public')) //這樣就可以訪問public目錄中的所有文件了
如果要托管多個靜態(tài)資源目錄 就多用幾次上面的示例
express 在指定的靜態(tài)目錄中查找文件,并對外提供資源的訪問路徑,因此存放靜態(tài)文件的目錄名不會出現(xiàn)在URL中
3掛載路徑前綴
app.use('/public',express.static('pbulic')) //這樣url中就必須由/public 了
4 nodemon
在編寫node.js項(xiàng)目的時(shí)候,如果修改了項(xiàng)目的代碼,就不需要頻繁啟動、停止