这是我的第一个问题。我的代码结构需要一些帮助。我在带有express的节点中的api必须执行以下操作:收据GET /api/file/{filename}
返回文件内容,它可能很大(几个GB)。现在,我可以使用流获取文件,但是在这种情况下,我不是处理错误的最佳实践。
'use strict';
const fs = require('fs');
const express = require('express');
const app = express();
const path = require('path');
const filePath = path.join(__dirname, `../file`);
console.log(filePath)
app.get('/api/:filename', (req, res) => {
let filename = req.params.filename
const streamFile = fs.createReadStream(`${filePath}/${filename}`);
streamFile.pipe(res);
} );
module.exports = app;
我应该创建另一个目录,也许是'模块',并且编写一个异步函数来读取和管道文件,并从路由目录中的app.get调用该函数?
[请记住,Express是一个“用于Node.js应用程序的,不受限制的,极简的Web框架”,未经限制的意味着它不会为您决定要用于每个特定任务的工具的很多方面,而这就是与其他框架(如Rails)的主要区别。也就是说,在这种情况下,您可以围绕I / O操作使用经典和旧的try
和catch
。模块是保持关注点分离的一种方式,也是组织代码的一种方式,因此您可以快速识别导致故障的代码部分。因此,在这种情况下,我认为没有必要,因为您的路由器的回调正在做一件事,这没关系。
app.get('/api/:filename', (req, res) => {
let filename = req.params.filename
try{
const path = `${filePath}/${filename}`;
if (!fs.existsSync(path)) return res.status(404).send('You could send any message here...');
const streamFile = fs.createReadStream(path);
streamFile.pipe(res);
} catch {
res.status(500).send();
};
});