Sails.js: 200 response is sent before I want to send actual response
使用Sails.js 1.2.3,我试图通过HTTP或WebSockets从文件发送一些数据作为对GET请求的响应。无论我是在控制器中同步访问还是异步访问文件,Sails都会在发送实际所需的响应之前发送200 OK响应。最初,我尝试将文件传输到响应,但未成功:
1 2 3 4 5 6 7 8 9 10 | 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响应(无数据)。
如果我同步执行,例如:
1 2 3 4 5 6 7 8 | ... 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); |
...在我到达
因为这是异步功能,所以您必须添加await。如果您不添加等待,则将执行下一行,因为non-blocking
1 2 | var fd = await fs.openSync(file,"r"); var chunk = await fs.readSync(fd, chunkBuffer, 0, chunkSize, offset); |