Nodejs基礎(chǔ)知識3

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)目的代碼,就不需要頻繁啟動、停止

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容