express body-parser 小書
阿新 • • 發佈:2019-02-05
簡介
cookie-parser是Express最常使用的中介軟體,實際上雖然他名義上是一箇中間件但是實際上已經儼然成為了Express的一個不可或缺的部分.
在Express4的文件中,操作Cookie的部分就一個方法和一個屬性.但是實際上如果你不使用cookie-parser中介軟體這些方法是根本就不存在的.
先從Express操作cookie說起
如果有一個純淨的Express,像這樣:
const app = new express(); app.get('/login', (request, response) => { response.send('hello express'); }); app.listen(8888, '127.0.0.1');
我們如何操縱cookie?,顯然只能在request
和response
中操縱.
express在request
提供了:
- cookies {Object}
在response
提供了:
- res.cookie(name, value [, options])
簡單來講一個用於獲取另外一個用於寫入.
但是一切的前提就是你得使用cookie-parser中介軟體的前提下才可以擁有這個屬性和方法,之前我就被坑了.
在上面的極簡例項中我們得使用:
app.get('/login', (request, response) => { console.log(request.headers.cookie); response.send('hello express'); });
才可以獲取沒有使用cookie-parser中介軟體時候的cookie.
cookie-parser的具體功能
- 已鍵值對的形式的獲取cookie
- 使用簡單的方法設定cookie
- 對於cookie進行簽名
呼叫引數
cookie-parser在初始化的時候和寫入cookie的時候允許傳入引數.
在初始化的時候允許傳入:
引數 | 型別 | 描述 | |
---|---|---|---|
secret | string | string[] | 用於簽名cookie的字串 |
options | object | 選項基於cookie模組 |
cookie方法引數
基本格式如下res.cookie(name, value [, options])
.
其中第一個引數是name
是cookie的鍵,而value
是鍵對應的的值.
options有如下的選項,基本都是cookie在HttpHeader中的引數:
引數 | 型別 | 描述 |
---|---|---|
domain | string | 描述cookie作用的主機 |
path | stirng | 只有在匹配成功的地址才會傳送cookie預設 / |
encode | function | 用於cookie的編碼預設是encodeURIComponent |
expires | date | 使用GMT格式的時間來指定過期時間 |
maxAge | number | 指定多好毫秒後cookie失效 |
httpOnly | boolean | 設定後客戶端無法訪問cookie的內容 |
secure | boolean | 標記這個cookie只有在https協議下起作用 |
signed | boolean | 對於cookie進行簽名 |
sameSite | boolean | 阻止cookie在跨站請求的時候傳送 |
在MDN中有cookie的詳細解釋,上面除了signed
外都有介紹.
使用示例
基本示例:
const express = require('express');
const cookieParse = require('cookie-parser');
const app = new express();
app.use(cookieParse());
app.get('/login', (request, response) => {
// 以鍵值對的形式獲取所有的cookie
console.log(reqeust.cookies);
// 寫入cookie
response.cookie('key', 'value');
response.send('hello express');
});
app.listen(8888, '127.0.0.1');
使用cookie簽名:
const express = require('express');
const cookieParse = require('cookie-parser');
const app = new express();
// 傳入一個字串對cookie進行簽名
app.use(cookieParse('hello world'));
app.get('/login', (request, response) => {
// 獲取沒有簽名的cookie
console.log(request.cookies);
// 獲取簽名的cookie
console.log(request.signedCookies);
// 寫入簽名cookie
response.cookie('signed', 'true', {maxAge: 100000,signed:true});
// 寫入未簽名cookie
response.cookie('key', 'value');
response.send('hello express');
});
app.listen(8888, '127.0.0.1');