Node.js-模組化/包/express路由
阿新 • • 發佈:2022-04-15
模組化
提高程式碼的複用性,可維護性,實現按需載入 Node.js根據模組的來源不同,分為三類 內建模組:fs,path,http 自定義模組:使用者自己建立的 第三方模組:需要下載的 載入模組 使用require() 注:載入自定義模組,需要注意路徑問題 模組作用域:只能在該模組使用定義在該模組中的變數 好處:防止全域性變數汙染的問題 向外共享模組作用域中的成員 設定一個自定義模組module.exports.username = 'zs'; module.exports.sayhello = function () { console.log('hello'); }
設定測試
//在外界使用require倒入一個自定義模組的時候,得到的成員便是module.exports所指向的物件 const m = require('/Users/shuchenhao/Desktop/web前端學習/Node/自定義模組.js'); console.log(m);終端顯示結果 shuchenhao@shuchenhaodeMacBook-Air Node % node test1.js { username: 'zs', sayhello: [Function (anonymous)] }
共享成員的注意點
使用require()方法匯入模組時,匯入的結果,永遠以module.exports指向的物件為準。module.exports.username = 'zs'; module.exports.sayhello終端 shuchenhao@shuchenhaodeMacBook-Air Node % node test1.js { nickname: '小黑', sayhi: [Function: sayhi] } exports和module.exports指向同一個物件,最終共享的結果永遠以module.exports指向的物件為= function () { console.log('hello'); } module.exports = { nickname: '小黑', sayhi() { console.log('hi'); } }
包
//匯入moment名稱 const moment = require('moment'); const dt = moment().format('yyyy-mm-dd hh:mm:ss'); console.log(dt);如何安裝指定的版本號的包 Npm install [email protected] 同時最新的命令去安裝包會覆蓋之前安裝的包 解決下包速度慢的問題 切換npm的下包映象源 shuchenhao@shuchenhaodeMacBook-Air Node % npm config get registry https://registry.npmjs.org/ shuchenhao@shuchenhaodeMacBook-Air Node % npm config set registry=https://registry.npm.taobao.org/ shuchenhao@shuchenhaodeMacBook-Air Node % npm config get registry https://registry.npm.taobao.org/
包的分類
專案包 開發依賴包:被記錄到devDependencies節點中的包,只在開發期間會用到 核心依賴包:被記錄到dependencies節點中的包,在開發期間和專案上線之後都會用到 全域性包:在執行安裝命令的時候,如果提供-g引數,開發自己的包
首先建立一個資料夾包含以下檔案
在package.json中,存放版本,名稱等內容
{ "name": "ith-tools", "version": "1.2.0", "main": "index.js", "description": "提供了格式化時間,HTMLEscape相關功能", "keywords": [ "ith", "dateFormat", "escape" ], "license": "ISC" }
在index.js中存放
//包的入口 const date = require('./dataformat.js') const escape = require('./htmlEscape.js') module.exports = { ...date, ...escape }
在dataformat.js用於存放時間格式化的模組
//時間格式化 function dataformat(datastr) { const dt = new Date(datastr); const y = padZero(dt.getFullYear()); const m = padZero(dt.getMonth() + 1); const d = padZero(dt.getDate()); const hh = padZero(dt.getHours()); const mm = padZero(dt.getMinutes()); const ss = padZero(dt.getSeconds()); return y + '-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss; } //定義補0函式 function padZero(n) { return n > 9 ? n : '0' + n; } module.exports = { dataformat }
在htmlEscape中存放轉義html字元的函式模組
//定義轉義HTML字元的函式 function htmlEscape(htmlstr) { return htmlstr.replace(/<|>|"|&/g, (match) => { switch (match) { case '<': return '<'; case '>': return '>'; case '"': return '"'; case '&': return '&'; } }); }; //定義還原HTML字串的函式 function htmlUnEscape(str) { return str.replace(/<|>|"|&/g, (match) => { switch (match) { case '<': return '<'; case '>': return '>'; case '"': return '"'; case '&': return '&'; } }); }; module.exports = { htmlEscape, htmlUnEscape }
在readme中存放介紹
##安裝 ‘’‘ npm install ith-tools ''' ##匯入 ‘’‘js const itheima=require('ith-tools') ''' ##格式化時間 ‘’‘js //呼叫dateformat格式化時間 const newTIME = itheima.dataformat(new Date()); console.log(newTIME); ''' ##轉義html中的特殊字元 ‘’‘js //帶轉換的字串 const htmlstr = '<h1 title="abc">這是目標標籤<span>123 </span></h1>'; //呼叫htmlEscape方法進行轉換 const str = itheima.htmlEscape(htmlstr); console.log(str); ‘’‘ ##還原html中的特殊字串 ’‘’js //帶還原的html字串 const str2 = itheima.htmlUnEscape(str); console.log(str2); ‘’‘ 開源協議 ISC
然後釋出過程如下
1.註冊npm賬號 2.終端中登陸npm shuchenhao@shuchenhaodeMacBook-Air Node % npm login npm notice Log in on https://registry.npmjs.org/ Username: shuchenhao Password: Email: (this IS public) [email protected] npm notice Please check your email for a one-time password (OTP) Enter one-time password: 08342327 Logged in as shuchenhao on https://registry.npmjs.org/. 3.切換到釋出包資料夾下面輸入釋出命令 npm publish模組的載入機制
內建模組是由官方提供的模組,內建模組的載入優先順序最高。Express
基於node.js平臺,快速、開放、極簡的web開發框架 4.17.1版本 Express基於http模組封裝出來的,提高開發效率 常見兩種伺服器 Web網站伺服器:對外提供web網頁資源的伺服器 API介面伺服器:對外聽過API介面的伺服器 使用express,可以方便快速建立web網站伺服器和API介面伺服器 安裝express npm install express 建立一個基本的web伺服器//匯入 const express = require('express'); //建立web伺服器 const app = express(); //監聽get請求 app.get('/user', (req, res) => { res.send({ name: 'ss', age: 20 }); }); app.post('/user', (req, res) => { res.send('請求成功'); }) // 啟動 app.listen(80, () => { console.log('express running at http://127.0.0.1'); })終端執行伺服器之後,通過postman進行介面測試 監聽get請求
監聽post請求
獲取URL中帶的引數
app.get('/', (req, res) => { //通過req.query可以獲取到客戶端傳送過來的查詢引數 //預設情況下req.query是空物件 console.log(req.query); res.send(req.query); })
在query params中輸入key和value,點選send,則可以在終端中獲取URL中所帶的引數
shuchenhao@shuchenhaodeMacBook-Air Node % node 使用express建立伺服器.js express running at http://127.0.0.1 {} { name: 'ss', age: '10’ }
獲取URL中的動態引數
//這裡的:id是個動態引數 app.get('/user/:id', (req, res) => { //動態匹配的URL引數,預設的也是一個空物件 console.log(req.params); res.send(req.params) })
在user/之後不管輸入幾,都是動態獲取到Id的值
終端結果 shuchenhao@shuchenhaodeMacBook-Air Node % node 使用express建立伺服器.js express running at http://127.0.0.1 { id: '1’ } 可以設定多個動態引數
app.get('/user/:id/:name', (req, res) => { //動態匹配的URL引數,預設的也是一個空物件 console.log(req.params); res.send(req.params) })
shuchenhao@shuchenhaodeMacBook-Air Node % node 使用express建立伺服器.js express running at http://127.0.0.1 { id: '3', name: 'sch' }
託管靜態資源
通過express.static(),可以建立一個靜態資源伺服器, 如下,可以將public目錄下的圖片、css檔案、js檔案對外開放訪問 注:express在指定的目錄中查詢檔案,並對外提供資源的訪問路徑,因此,存放靜態檔案的目錄名不會出現在URL中
const express = require('express'); const app = express(); //呼叫express.static()方法,快速對外提供靜態資源 app.use(express.static('./anli')); app.listen(80, () => { console.log('express running at http://127.0.0.1'); })
託管多個靜態資源目錄
多次呼叫express.static()函式 根據目錄的新增的順序查詢所需的檔案。掛載路徑字首
app.use('/abc', express.static('./files'));在網頁中輸出的時候要加上/abc字首
Nodemon
在編寫除錯node.js專案的時候,如果修改了專案的程式碼,則需要頻繁的手動close,然後在重新啟動,nodemon工具可以監聽專案的變動,重新啟動專案。Express路由
在express中,路由指客戶端請求和伺服器處理函式之間的對映關係。 Npm init -y初始化一個package.json 包管理配置檔案模組化路由
不建議直接吧路由直接掛載在app上,推薦模組化 建立路由模組//路由模組 const express = require('express'); const router = express.Router(); //掛載具體路由 router.get('/user/list', (re1, res) => { res.send('Get user list'); }) router.posy('/user/add', (re1, res) => { res.send('Add new user'); }) //匯出路由物件 module.exports = router;
再另一個js檔案中註冊路由
const express = require('express'); const app = express(); //匯入路由模組 const router = require('./模組化路由.js'); //註冊路由模組 app.use(router); app.listen(80, () => { console.log('http://127.0.0.1'); })
為路由庫快新增字首
app.use('/api', router);