扫码关注官方订阅号
小伙看你根骨奇佳,潜力无限,来学PHP伐。
1.直接的bug就是1楼的同学说的2.但是你在读文件的时候没用到流,所以我觉得你可以直接使用_this.res.end(data)可以避免你的问题3.从你的代码中读出来几点意见给你
_this.res.end(data)
fs.exists(path, callback)这个方法很早就已经Deprecated了,所以也不推荐你使用,用 fs.lstat() or fs.access()代替吧!
fs.exists(path, callback)
fs.lstat() or fs.access()
既然你想用write,那你读文件的时候就可以用流去读,这样如果是一个超大的文件的话,你就可以流式读取的方式读出来,你现在readFile,然后直接write,最后end,还是一次性把文件内容读到内存中,对于大文件来说还是体验很差,推荐使用下面的代码尝试一下
const filePath=path.join(__dirname, 'xxxx.json') fs.lstat(filePath, (err, stats) => { if(err) return res.status(500).end('file is not founded') res.writeHead(200, { 'Content-Type' : 'application/json', }) const readStream = fs.createReadStream(filePath) readStream.on('end', () => { res.end() }) readStream.on('error', (error) => { res.end(`read file stream error ${error.message}`) }) readStream.pipe(res) })
随手写了一些, 你可以进行优化,打日志,或者用async解决callback hell问题等,还有头类型,返回的错误信息等,不过核心的流式吐出的代码应该没问题,仅供参考,希望对你有帮助
res.write()是异步的,所以上面代码执行书序是res.end()之后才真的是write。你可以在write的回调中调用end
res.write()
res.end()
用 res.on('finish', res.end) 试一下
res.on('finish', res.end)
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
1.直接的bug就是1楼的同学说的
2.但是你在读文件的时候没用到流,所以我觉得你可以直接使用
_this.res.end(data)可以避免你的问题3.从你的代码中读出来几点意见给你
fs.exists(path, callback)这个方法很早就已经Deprecated了,所以也不推荐你使用,用fs.lstat() or fs.access()代替吧!既然你想用write,那你读文件的时候就可以用流去读,这样如果是一个超大的文件的话,你就可以流式读取的方式读出来,你现在readFile,然后直接write,最后end,还是一次性把文件内容读到内存中,对于大文件来说还是体验很差,推荐使用下面的代码尝试一下
随手写了一些, 你可以进行优化,打日志,或者用async解决callback hell问题等,还有头类型,返回的错误信息等,不过核心的流式吐出的代码应该没问题,仅供参考,希望对你有帮助
res.write()是异步的,所以上面代码执行书序是res.end()之后才真的是write。你可以在write的回调中调用end用
res.on('finish', res.end)试一下