Я создаю конечную точку, которая обслуживает файл, созданный динамически. Я написал контроллер, который генерирует файл после определенной операции на основе параметра запроса 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 или я делаю что-то не так?