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