express 創建后台服務時,后台服務是需要配置請求體和響應頭的。
如果不想安裝中間件,給 header 設計不同的響應頭,也可以做到同中間件同樣的效果,但是設置setHeader()需要放在路由之前
請求體
當后台收到一個 POST 或 GET 時,Node.js 的 request 可以將請求體也就是請求的數據傳給服務端。
響應頭
當服務端收到請求體的數據后,會通過 response 返回一個實例對象,這個實例對象就是請求到的數據,包含請求狀態信息,數據實例以及錯誤信息。
Response 是一個響應對象,默認使用它的簡寫 res 代替。
Express 提供了20種 res 方法,默認情況下,設置響應頭使用 res.setHeader() 方法,
res.set(field, [value])
例如:
app.all('*', function(req, res, next) { res.setHeader('Access-Control-Allow-Origin','*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization'); // res.setHeader("Content-Type", "application/json;charset=utf-8"); next(); })
或傳遞一個字段或多個字段:
res.set({ 'Content-Type': 'text/plain', 'Content-Length': '123', 'ETag': '12345' })
res.setHeader() 的別名為 res.header(),這兩個方法是等效的。
不同的響應頭,都有不同的作用:
- Access-Control-Allow-Origin 允許跨域訪問
-
Access-Control-Allow-Headers 向瀏覽器發送預檢請求,詢問是否支持跨域的自定義 header 字段
-
Access-Control-Allow-Methods 詢問是否支持跨域的請求方法
-
Access-Control-Allow-Credentials 允許客戶端攜帶驗證信息去請求,例如 cookie 之類的
以下是全局設置響應頭的代碼:
const app = express(); app.all('*', (req, res, next) => { const { origin, Origin, referer, Referer } = req.headers; const allowOrigin = origin || Origin || referer || Referer || '*'; res.header("Access-Control-Allow-Origin", allowOrigin); res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); res.header("Access-Control-Allow-Credentials", true); //可以帶cookies res.header("X-Powered-By", 'Express'); if (req.method == 'OPTIONS') { res.sendStatus(200); } else { next(); } });
參考這個網站:https://www.codota.com/code/javascript/functions/express/Response/header
有很多的例子。