幾天前我開始使用快遞。我真的不明白發生了什么:
const express = require("express")
const app = express()
app.use(express.static(path.join(), "public"))
app.use(require("cors")())
app.listen(3000, () => console.log("running"))
第一個例子對我有用,但我不太明白。基本上我不明白發生了app.use()什么以及中間件是什么..
有人可以幫我嗎?我讀了很多博客,但我沒有明白:(
uj5u.com熱心網友回復:
背景
有幾個部分可以解釋這一點。首先, offapp.use()期望將中間件函式傳遞給它。那將是一個具有如下簽名的函式:
app.use(function(req, res, next) {
console.log(req.path); // log incoming request path
next(); // continue routing to other handlers
});
它接受其他引陣列合,包括初始路徑,您也可以傳遞多個中間件函式,并將它們鏈接在一起,但您的問題的基礎是關于單個中間件函式,如上所示。該中間件函式獲得三個引數req- 傳入的請求物件,res- 傳出的回應物件和next- 如果您想繼續路由或報告錯誤,則要呼叫的函式。
這些中間件功能之一的作業是使用req物件中的輸入對該輸入進行某種處理(取決于中間件功能的目的),然后執行以下三件事之一:
使用類似的方式發送回應,
res.send()在這種情況下,請求已被處理并已發送回應,并且不會進行進一步的路由。通過呼叫 繼續路由到鏈中的其他請求處理程式
next()。中止路由并通過呼叫轉到 Express 錯誤處理程式
next(err)。
express.static() 中間件
所以,這就是傳遞給app.use(). 現在,讓我們看一下您詢問的兩個示例。讓我們開始express.static():
app.use(express.static(path.join(), "public"))
首先,這不是正確使用express.static(). 我不確定你的意圖,但我假設你的意思是這樣的:
app.use(express.static(path.join(__dirname, "public")));
在這種情況下,express.static()獲取一些配置資訊,這是呼叫的結果路徑,path.join(__dirname, "public")并使用它來創建自定義中間件函式。因此,呼叫express.static(path.join(__dirname, "public"))回傳一個函式,該函式期望使用我們之前討論過的三個中間件引數來呼叫。它在邏輯上與此相同:
const publicPath = path.join(__dirname, "public");
const myStaticMiddleware = express.static(publicPath);
app.use(myStaticMiddleware);
這在邏輯上等同于:
const publicPath = path.join(__dirname, "public");
const myStaticMiddleware = express.static(publicPath);
app.use(function(req, res, next) {
myStaticMiddleware(req, res, next);
});
代碼已分解為單獨的步驟,以便您可以單獨查看每個步驟。
而且,如果您還不知道,express.static()如果傳入請求與指定目錄中的檔案名完全匹配并且具有適當的檔案型別,則中間件的重點是從指定目錄提供靜態檔案。
cors中間件
對于您的第二個示例:
app.use(require("cors")())
讓我們再次將其分解為各個步驟:
const cors = require("cors"); // load cors module
const corsMiddleware = cors(); // create cors middleware function
app.use(corsMiddleware); // register middleware with Express server
可以擴展為:
const cors = require("cors");
const corsMiddleware = cors();
app.use(function(req, res, next) {
corsMiddleware(req, res, next);
});
只是為了向您展示使用這三個引數呼叫 corsMiddleware。
這個特定中間件的目的是幫助配置對此請求的回應,以便接受跨源請求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/374079.html
