1. 程式人生 > >Node.js的expressjs框架對response的處理流程實驗

Node.js的expressjs框架對response的處理流程實驗

之前一直考慮實現這麼個流程:

  1. 獲取使用者更新資料的請求
  2. 更新快取
  3. 返回結果
  4. 資料持久化

主要是不想讓資料持久化這一步佔用響應時間,實驗的程式碼如下

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之後響應就直接發給客戶端了。