我正在使用 Busboy 在 Node/Express 应用程序中上传文件。我收到错误Unexpected end of multipart form
和应用程序崩溃。每当我尝试治疗失眠的方法时,都没有效果。在显示 Busboy 不是构造函数之前,我将 let 更改为 const 并删除了 new,保持代码中的原样。
导致此错误的原因可能是什么?
这是我的代码:
router.post('/', async (req, res) => {
const busboy = Busboy({ headers: req.headers });
busboy.on('finish', async () => {
try {
const { salaoId, servicos } = req.body;
let error = [];
let arquivos = [];
console.log(req.files)
if (req.files && Object.keys(req.files) > 0) {
for (let key of Object.keys(req.files)) {
const file = req.files[key];
const nameParts = file.name.split('.');
const fileName = `${new Date().getTime()}.${nameParts[nameParts.length - 1]
}`;
const path = `servicos/${salaoId}/${fileName}`;
const response = await aws.uploadToS3(file, path);
if (response.error) {
error.push({ error: true, message: response.message })
} else {
arquivos.push(path)
}
}
}
if (error.length > 0) {
res.json(error[0]);
return false;
}
//CRIAR SERVIÇO
let jsonServico = JSON.parse(servicos);
const servicoCadastrado = await Servicos(jsonServico).save();
//CRIAR ARQUIVO
arquivos = arquivos.map(arquivo => ({
referenciaId: servicoCadastrado._id,
model: 'Servicos',
caminho: arquivo,
}));
await Arquivo.insertMany(arquivos);
res.json({ servicos: servicoCadastrado, arquivos });
} catch (error) {
res.json({ error: true, message: error.message })
}
});
req.pipe(req.busboy)
});
module.exports = router;
这是错误:
throw er; // Unhandled 'error' event
^
Error: Unexpected end of form
at Multipart._final (C:\Users\Lenovo\Desktop\projetos\meus-projetos\app-claudiagomes\ws\node_modules\busboy\lib\types\multipart.js:588:17)
我对 Next.JS API 路由也有类似的问题。
Busboy 使用原生 Node.JS“http”服务器运行良好,如其页面上的示例所示,但在 Next.JS 中引发错误。在比较“http”服务器和 Next.JS API 路由处理程序中的请求后,我发现它们略有不同。
差异只是在极少数我不知道其含义的属性中,但它仍然让我想到 NextJS 以某种方式更改了本机 http 请求,因此 Busboy 无法使用它。
我阅读了 Next.JS 的文档并发现了这一点
bodyParser 会自动启用。如果您想将主体作为 Stream 或 raw-body 来使用,您可以将其设置为 false。
所以我添加了这个配置对象,正如 NextJS 文档中所建议的那样
export const config = {
api: {
bodyParser: false,
},
}
它修复了错误
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)