express框架
express框架
express介紹:
Express 介紹Express 是一個簡潔而靈活的 node.js Web應用框架, 提供了一系列強大特性幫助你建立各種 Web 應用,和豐富的 HTTP 工具。使用 Express 可以快速地搭建一個完整功能的網站。
中介軟體:封裝好的函式(外掛)
路由表:根據不同的請求,訪問不同的介面。
Express 框架核心特性:
可以設定中介軟體來響應 HTTP 請求。定義了路由表用於執行不同的 HTTP 請求動作。可以通過向模板傳遞引數來動態渲染 HTML 頁面。express不對node.js本身的特性進行二次抽象 而是在基本功能上進行擴充 express完全是由路由和中介軟體構成的框架從本質上來說一個express應用就是為了呼叫各種中介軟體
簡單的說express可以很快速的讓我們使用mvc的方式建立一個web應用(前後端可以分離,也可以不分離)
Express建立伺服器
全域性安裝 npm i express -g
進入專案後,使用npm init -y 初始化專案
本地安裝 npm i express -D
// 獲取到了express 模組 const express = require('express'); const { json } = require('express'); // 建立一臺伺服器 const app = express(); // 埠 3000 // http 預設80 // https 預設443 app.listen(3000,function(){ console.log('啟動成功了') })
使用步驟:
建立一個js檔案,在檔案中獲取到express模組,
使用const 名稱 = express()來建立一臺伺服器。
用 名稱.listen(埠,function(){
Console.log(‘啟動成功’)
})來監聽執行的結果。
建立和監聽中間可以新增請求
發起請求的例子:
app.get('/login',function(request,response){ // request 前端發起的請求 // response 後端的響應 response.send('login!') })
關於目錄的問題:
只寫個 / 說明在根路徑(根目錄)
寫 /login 說明在login檔案
response.send() 這個方法是返回一個文字,顯示在頁面上
response.json()返回一個json格式
npm指令碼
在package.json檔案中的scripts 裡面增加一個配置
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start":"node 檔名.js", "dev":"nodemon 檔名.js" }
我們在終端中輸入npm start,可以執行node 檔名.js 從而啟動專案。
終端中輸入 npm run dev 可執行nodemon 檔名.js
除了start這個指令碼命令配置可以直接 使用npm start,其他指令碼命令都需要 使用npm run 命令。
中介軟體和路由
express完全是由路由和中介軟體構成的框架從本質上來說一個express應用就是為了呼叫各種中介軟體。
中介軟體本質就是一個函式,也可以叫外掛,只不過express裡面我們更習慣叫中介軟體。
掛載中介軟體 use(中介軟體監聽的路徑,中介軟體函式)
用 名稱.use(path,fn),後面設定兩個引數,請求的路徑如果匹配到了路徑,就會執行後面的函式。
第一個引數:路徑,不傳引數是全部,預設*也是全部
第二個函式是回撥函式,如果匹配到路徑就執行後面的函式。很多時候後面都是第三方封裝好的一個函式,這個函式我們稱之為中介軟體。
回撥函式中是三個引數req res next
req就是請求,res是伺服器的響應,next一旦呼叫,會把請求交給下一個中介軟體去處理,如果不呼叫next請求到這裡就結束了,不會把請求傳遞給其他的中介軟體了,會一直停在呼叫next這個中介軟體的位置。
自定義中介軟體
在一個js檔案中
// 自定義中間 function test(req,res,next){ console.log('這是自定義中介軟體') console.log(req.url,'請求經過了test中介軟體'); // 在中介軟體可以可以獲取的前端請求的資料req // 如果不呼叫next() 那麼後面的掛載的中介軟體就不會執行 next() } module.exports = test;
在呼叫express的檔案中使用
// 載入模組 const test = require('./test') // 第一個引數為路徑,只有包含這個路徑的請求,才會經過這個中介軟體 app.use("/a",test)
路由中介軟體
路由:前端訪問不同的地址,後端要返回不同的資料,這就叫後端路由
獲取路由中介軟體
var router = express.Router() //內建中介軟體
處理get請求
router.get(監聽請求的路徑,處理回撥函式)
處理post請求
router.post(監聽請求的路徑,處理回撥函式)
匯出時,module.export = router
get請求引數的獲取
req.query 獲取url中?後面的引數,並自動轉為物件
post引數的獲取
post請求引數的獲取需要使用中介軟體express.urlencoded和req.body
express.urlencoded()//解析請求體和請求頭,放在介面路由前面
get請求的另一種傳參:在地址後面新增 :id
例:
router.get("/test/:id", function (req, res, next) { //獲取get請求的url中的引數 // /users/test/12 //{ id: '12' } console.log(req.params) res.json({ code: 1 }); //返回json資料 });
請求 /users/test/12,得到結果{ id: '12' }
跨域訪問介面
前端在開發中經常會被不能跨域訪問所折磨,這次我們做後端,幾句程式碼就可以支援跨域!(媽媽再也不用擔心跨域報錯了)
app.js中給所有的請求都設定響應頭
//設定跨域訪問 app.all("*", function (req, res, next) { //設定允許跨域的域名,*代表允許任意域名跨域 res.header("Access-Control-Allow-Origin", req.headers.origin || '*'); //允許的header型別 res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); // //跨域允許的請求方式 res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); // 可以帶cookies res.header("Access-Control-Allow-Credentials", true); if (req.method == 'OPTIONS') { res.sendStatus(200); } else { next(); } })
靜態資源託管中介軟體 express.static()
開啟一個網站,我們可能訪問的html中載入css,js,圖片等檔案,這些檔案就叫靜態資源。
我們網頁中發起請求,請求介面返回的資料叫動態資源。 靜態資源一般不需要做處理,直接就返回給瀏覽器 動態資源一般後端會處理,比如過解析前端的請求過來的url和引數,根據url和引數不同返回不同的json資料
使用express很容易就能建立一個靜態資源伺服器 express.static()
靜態檔案資源的路徑
__dirname 當前資料夾的絕對路徑
__filename 當前資料夾的絕對路徑
所有請求過來的靜態資源中介軟體內部都回去 public資料夾裡查詢,看看能不能找到這個檔案,找到就返回檔案,找不到,就交給剩下的路由去處理。
http://localhost:3000/imgs/1.gif //就是從 public資料夾裡面找 imgs/1.gif
express腳手架建立專案(腳手架:應用的骨架)
express內建了很多中介軟體,我們一個一個配置比較麻煩,並且做一個後端專案,我們可以需要一些別的中介軟體,比如說日誌外掛,錯誤處理外掛等等,需要考慮的比較多,這裡我們藉助於工具去建立一個通用的專案模板,就能省下這個配置過程。
通過如下命令安裝
npm install express-generator -g
建立專案
express -e express-檔名
-e是指定了專案中使用的模板引擎
建立專案
express -e express-檔名
-e是指定了專案中使用的模板引擎