[英]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.send
或this.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.