Node.js的expressjs框架對response的處理流程實驗
阿新 • • 發佈:2019-01-28
之前一直考慮實現這麼個流程:
- 獲取使用者更新資料的請求
- 更新快取
- 返回結果
- 資料持久化
主要是不想讓資料持久化這一步佔用響應時間,實驗的程式碼如下
app.get('/', function (req, res, next) {
res.status(200).jsonp({ data: "AAA" })
next()
}, function (req, res) {
setTimeout(function () {
console.log("Cached!");
}, 5000)
});
這裡我們用了express的中介軟體,可以把資料處理的各個流程寫到不同的function裡面,根據需要組裝。用POSTMAN測試一下,你會看到瞬間返回了“AAA”,然後過了5秒鐘才在console打出了”Cached“,這基本就是我想要的結果。
然後繼續實驗,把
res.status(200).jsonp({ data: "AAA" })
改成
return res.status(200).jsonp({ data: "AAA" })
這次客戶端正常返回,但是console沒有打印出”Cached“,也就是說加了return之後直接結束了整個響應流程,後面的所有程式碼和中介軟體都不再執行了。
我們繼續改造:
app.get('/', function (req, res, next) {
res.status(200).jsonp({ data: "AAA" })
next()
}, function (req, res) {
res.status(200).jsonp({ data: "BBB" })
setTimeout(function () {
console.log("Cached!");
}, 5000)
});
那如果我多次修改response物件會怎麼樣呢?
這次客戶端也收到結果了,但是console卻直接列印了Error:Cannot set header after they are sent.
由此我們可見res之後響應就直接發給客戶端了。