簡體   English   中英

Sails.js:我要發送實際響應之前已發送200個響應

[英]Sails.js: 200 response is sent before I want to send actual response

使用Sails.js 1.2.3,我試圖通過HTTP或WebSockets從文件發送一些數據作為對GET請求的響應。 無論我是在控制器中同步還是異步訪問文件,Sail都會在發送實際所需的響應之前發送200 OK響應。 最初,我嘗試將文件傳遞到響應,但未成功:

fn: async function() {
    var fs = require("fs");
    let filename = `foo.bar`;
    let file = require("path").resolve(
      sails.config.appPath,
      `.tmp/${filename}`
    );
    let filestream = fs.createReadStream(file);
    filestream.pipe(this.res);
}

這樣,我會收到“結束后寫入”錯誤,並在此錯誤發生之前立即將200 OK響應(無數據)發送到客戶端。

如果我同步進行操作,例如:

     ...
      var offset = 0;
      var chunkSize = 2048;
      var chunkBuffer = new Buffer(chunkSize);

      var fd = fs.openSync(file, "r");
      var chunk = fs.readSync(fd, chunkBuffer, 0, chunkSize, offset);
      this.res.send(chunkBuffer);

...在到達this.res.send()之前已發送200 OK響應(無數據this.res.send() 在我可以在控制器中做任何有用的事情之前,必須有一些我不知道的自動響應處理會發送200 OK。 在獲取需要發送的數據后,直到我明確地說出this.res.sendthis.res.end ,我該如何不發送任何響應? 謝謝!

因為那是異步函數,所以必須添加await。 如果您不添加等待,則將執行下一行,因為非阻塞

var fd = await fs.openSync(file, "r");
var chunk = await fs.readSync(fd, chunkBuffer, 0, chunkSize, offset);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM