Node.js - файл для загрузки с использованием express - PullRequest
1 голос
/ 17 июня 2020

Я создаю конечную точку, которая обслуживает файл, созданный динамически. Я написал контроллер, который генерирует файл после определенной операции на основе параметра запроса fileId.

Я выдаю несколько ошибок, если что-то пойдет не так во время создания файла или это недействительный запрос. Я использовал Promise.reject() для выдачи ошибки и при успешном создании файла, возвращающего ответ {fileName, filePath} как обещание от контроллера.

import express from 'express'
import downloadFile from '../controller/file.controller'

const router = express.Router()
router.post('/file/download/:fileId', (req, res) => {
  downloadFile(req.fileId).then((fileResp) => {
    res.download(fileResp.filePath, fileResp.fileName, function (error) {
      if (error) {
        console.log('Downloading error')
      } else {
        console.log('Downloading success')
      }
    })
  }).catch((error) => {
    res.status(error.status).json({message: error.message})
  })
})

Я заметил, что файл обслуживается при запросе конечной точки, но он будет пустой из нулевого размера байтов.

Я пробовал то же самое без Promise, который работает хорошо. В этом подходе я изменил свои ошибки с Promise.reject() на throw error и ответ с Promise на object

import express from 'express'
import downloadFile from '../controller/file.controller'

const router = express.Router()
router.post('/file/download/:fileId', (req, res) => {
  const fileResp = downloadFile(req.fileId)
  res.download(fileResp.filePath, fileResp.fileName, function (error) {
    if (error) {
      console.log('Downloading error')
    } else {
      console.log('Downloading success')
    }
  })
})

Я не могу найти проблему в первом подходе. Проблема в Promise или я делаю что-то не так?

...