1. 程式人生 > 實用技巧 >express框架

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是指定了專案中使用的模板引擎