目錄
(1)npm init -y 初始化項目,生成package.json文件
---生成 node_modules 文件夾 和 package-lock.json 文件
--- 執行npm install express -save 和 npm install express --no-save 的區別
一、前言
最近每天都有三到五個粉絲的關注,不免增加我寫博文的動力,這不一大早其它同事還沒來,我又開始寫博文了,其實寫博文是非常枯燥的事情,需要毅力決心來堅持!在此感謝大家的關注和支持,同時歡迎留言共同交流進步!上一篇文章我們講了res對象的常見方法res.json()、res.redirect()等方法的使用,詳細可參考博文:Node.js後端開發 - 進階篇 #7 express框架之res對象的常見方法 ,這篇文章我們將講一下對路由模塊的封裝
二、路由模塊的封裝
1、初始化項目、安裝express框架
(1)npm init -y 初始化項目,生成package.json文件
在 Visual Studio Code 新建文件夾 express-project(注:需要注意的是項目名稱和模塊名稱express不要一樣),然後在裏面新建一個文件 app.js,打開終端執行如下命令:
npm init -y 初始化項目,它會在項目中自動生成一個package.json文件。
(2)npm init -y 和 npm init 區別
前面講基礎篇章的時候我們有講到 npm init命令,詳細可參考:Node.js後端開發 - 基礎篇 #17 package.json 文件 這裏的 npm init -y 和 npm init 不同的是:它省去了敲回車的步驟,直接略過所有問答,全部採用默認答案,去生成的默認的package.json
$ npm init -y
Wrote to /Users/luminal/Desktop/nodejs/express-project/package.json:
{
"name": "express-project",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
(3)安裝 express 框架
---生成 node_modules 文件夾 和 package-lock.json 文件
執行 npm install express -save 命令安裝express框架,並將其保存到依賴列表中。
$ npm install express -save
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
+ [email protected]
added 50 packages from 37 contributors and audited 126 packages in 9.879s
found 0 vulnerabilities
╭────────────────────────────────────────────────────────────────╮
│ │
│ New minor version of npm available! 6.9.0 → 6.12.0 │
│ Changelog: https://github.com/npm/cli/releases/tag/v6.12.0 │
│ Run npm install -g npm to update! │
│ │
╰────────────────────────────────────────────────────────────────╯
這個時候它會在項目中生成一個 node_modules 的文件夾 和 package-lock.json 的文件
--- 執行npm install express -save 和 npm install express --no-save 的區別
如果只是臨時安裝 Express,不想將它添加到依賴列表中,可執行如下命令:
$ npm install express --no-save
npm 5.0+ 版本在默認情況下會將安裝的模塊添加到 package.json
文件中的 dependencies
列表中。對於較老的 npm 版本,你就必須指定 --save
參數。然後,照舊執行 npm install
命令即可自動安裝依賴列表中所列出的所有模塊。
2、封裝路由模塊
npm init -y 初始化項目、npm install express --save 安裝express框架以後,現在我們開始正式編碼
步驟1:寫主模塊 app.js
// app.js 模塊職責:負責啓動服務
//1. 加載 express 模塊
var express = require('express');
//加載 config.js 模塊
var config = require('./config.js');
//加載路由模塊
var router = require('./router.js');
//2. 創建 app 對象
var app = express();
//3. 啓動路由
// 雖然express框架註冊路由,相對於以前簡單了,
// 但是這個代碼本身還是屬於路由模塊。
// router既是一個對象,也是一個函數,
// 所以可以這樣調用,並傳遞app對象
// ---> router.js
router(app);
//4. 啓動服務
app.listen(config.port, function () {
console.log('http://localhost:'+config.port);
});
雖然express框架註冊路由,相對於以前簡單了,但是這個代碼本身還是屬於路由模塊。
下面我們來新建配置模塊 config.js、路由模塊 router.js
步驟2:寫配置模塊 config.js
前面我們講過模塊化了,我們把端口號放在一個獨立模塊裏面 config.js
// 配置模塊: 主要職責是負責保存項目中的配置信息
module.exports = {
port : 3000
};
步驟3:寫路由模塊 router.js
// 我們封裝一個模塊一般需要考慮三個問題:
//1、什麼樣的代碼要放到這個模塊當中? 代碼模塊化確定
//2、這些代碼是否用到外部的一些數據? 我們需要拿到app
//3、當前這個模塊對外應該暴露一些什麼東西?(module.exports)? 通過一個方法
//路由模塊:主要負責路由判斷
// 把router作爲函數返回暴露出來
// 這樣傳遞app主對象,暴露了app主對象,這樣做不安全
module.exports = function (app) {
app.get('/', function (req, res) {
console.log("當前根目錄");
});
app.get('/index', function (req, res) {
console.log("index");
});
};
雖然這麼寫可以實現功能,但是express不推薦這麼寫!原因是這樣傳遞app主對象,暴露了app主對象,這樣做不安全。我們使用router.js 是爲了註冊一些路由,但是這樣把主對象app給傳遞暴露出來了。假如主對象裏面有停止服務的方法 stopServer,在router.js 裏面是能調用到的,這樣做肯定不安全!