Javascript Node.js-使用express提供下载文件

Javascript Node.js-使用express提供下载文件,javascript,node.js,express,es6-promise,Javascript,Node.js,Express,Es6 Promise,我正在创建一个端点,为动态生成的文件提供服务。我已经编写了一个控制器,它根据请求参数fileId在特定操作后生成文件 如果文件生成过程中出现任何错误或请求无效,我会抛出一些错误。我使用了Promise.reject()来抛出错误,并在成功生成文件时从控制器返回响应{fileName,filePath} import express from 'express' import downloadFile from '../controller/file.controller' const rout

我正在创建一个端点,为动态生成的文件提供服务。我已经编写了一个控制器,它根据请求参数
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.reject()
更改为
throw error
,并将响应从
Promise
更改为
对象

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')
    }
  })
})
我无法在第一种方法中找到问题。是承诺导致了问题还是我做错了什么