【发布时间】:2021-07-22 02:29:39
【问题描述】:
背景
我正在尝试使用 NextJS 和 react-redux 创建一个简单的 CRUD 应用程序,所以它的作用是保存人们的联系人。所以当添加联系人时,我试图将一些数据与文件一起发送到 NextJS API。
问题
ContactAction.js
从 redux 操作发出 POST 请求以添加联系人
export const addContact = (data) => async (dispatch) => {
try {
var formData=new FormData();
formData.append('name',data.Name);
formData.append('email',data.Email);
formData.append('phone',data.Phone);
formData.append('image',data.Image);
let response= await Axios.post(`http://localhost:3000/api/contact/addContact`,formData,{
headers:{
'x-auth-token':localStorage.getItem('token')
}
});
} catch (error) {
console.log(error);
}
}
addContact.js
这是/api/contact/中的API路由
const handler = async (req, res) => {
switch(req.method){
case "POST":{
await addContact(req,res)
}
}
}
const addContact = async (req, res) => {
console.log(req.body);
// do some stuff here and send response
}
这是我在登录后在终端中得到的,在登录req.files时文件也是乱码@
目前的努力
我尝试使用第三方软件包,例如 formidable 和 formidable-serverless,但没有成功。所以一天后,我使用了一个名为 multiparty 的包。
addContact.js
const handler = async (req, res) => {
switch(req.method){
case "POST":{
let form = new multiparty.Form();
let FormResp= await new Promise((resolve,reject)=>{
form.parse(req,(err,fields,files)=>{
if(err) reject(err)
resolve({fields,files})
});
});
const {fields,files} = FormResp;
req.body=fields;
req.files=files;
await addContact(req,res)
}
}
}
const addContact = async (req, res) => {
console.log(req.body); //Now i get an Object which i can use
// do some stuff here and send response
}
上述解决方案显然是多余的,可能不是最好的解决方法,而且我不想将这 7 8 行添加到每条路线中。
所以如果有人能帮助我理解我做错了什么以及为什么formData 似乎不适用于 NextJS API(当它与 Express 服务器一起使用时),我将不胜感激。
【问题讨论】: