簡體   English   中英

我應該如何處理這個nodejs代碼來做正確的事情?

[英]how should I handle this nodejs code to do the rigth things?

這是我在這里的第一個問題。 我需要一些關於我的代碼結構的幫助。 我在節點中的 api 必須執行以下操作:receipt 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;

我是否應該創建另一個目錄,也許是“模塊”,並編寫一個異步 function 來讀取和 pipe 文件,然后從 app.get 路由中調用 ZC1C425268E68385D1AB5074C17A94F14 文件?

請記住,Express 是“用於 Node.js 應用程序的無主見、極簡主義 web 框架”,無主見意味着它不會為您決定您為每個特定任務使用什么工具的很多方面,這是與另一個的主要區別Rails 等框架。 也就是說,您可以使用經典的和舊的trycatch ,在這種情況下圍繞您的 I/O 操作。 模塊是一種保持關注點分離的方法,它是一種組織代碼的方法,因此您可以快速識別導致故障的代碼部分。 所以在這種情況下,我認為沒有必要,因為您的路由器的回調正在做一件事,這沒關系。

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();
  };
});

暫無
暫無

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

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