Node.js 在Express中访问文件上载formData

Node.js 在Express中访问文件上载formData,node.js,express,upload,fetch,Node.js,Express,Upload,Fetch,如何访问API中的文件 我阅读了其他解决方案,所有这些解决方案都需要npm包来解决这个问题。我想知道为什么我不能做。此外,答案很旧,建议使用主体解析器,它现在与Express捆绑在一起。 我希望解决方案是香草JS,以便更好地理解流程 客户端 异步函数上传文件(文件){ 设formData=new formData(); formData.append(“文件”,file); 让res=等待fetchPostFile(“/api/files”,formData); } 获取 导出异步函数fetc

如何访问API中的文件

我阅读了其他解决方案,所有这些解决方案都需要npm包来解决这个问题。我想知道为什么我不能做。此外,答案很旧,建议使用主体解析器,它现在与Express捆绑在一起。

我希望解决方案是香草JS,以便更好地理解流程

客户端

异步函数上传文件(文件){
设formData=new formData();
formData.append(“文件”,file);
让res=等待fetchPostFile(“/api/files”,formData);
}
获取

导出异步函数fetchPostFile(url、formData){
试一试{
让结果=等待(
等待获取(url{
方法:“张贴”,
事实上,
证书:“包括”,
标题:{
授权:localStorage.getItem(“令牌”),
接受:“应用程序/json”,
“内容类型”:“多部分/表单数据”,
},
正文:formData,
})
).json();
返回结果;
}捕捉(错误){
返回错误;
}
}
api

router.post(“/api/files”),异步函数(req、res、next){
试一试{
console.log(req.file);//未定义
console.log(req.files);//未定义
console.log(请求主体);//{
}捕捉(错误){
下一个(错误);
}最后{
请求连接释放();
}
});
为什么
req.body
为空?请帮助我理解我做错了什么。

首先,您需要使用包在express中处理
多部分/表单数据。必须将其用作中间件来设置文件的字段名。作为参数传递给
single()
函数的名称必须与客户端附加的名称匹配

const multer = require('multer')

router.post("/api/files", multer().single('file'), async function (req, res, next) {
  try {
      console.log(req.file)
  } catch (err) {
      next(err)
  } finally {
      req.connection.release()
  }
});

这回答了你的问题吗?否,因为主体解析器是在Express中内置的,在我的例子中,
req.body
是空的。我在研究了一切之后问了这个问题。不是内置的。但是,由于您使用的是
多部分/表单数据
,因此需要改用。这两点都在我链接的答案中提到了。为什么我需要一个包?我特别要求一种普通的方法来实现这一点。我明白了,但为什么需要Multer?您试图发送表单数据,但没有告诉express它应该需要表单数据。Multer提供了处理客户端发送的表单数据的能力。因此,你是说你必须使用库,即Express不支持它。如果有工具可以让你的工作更轻松,为什么要使用vanilla js呢?