node.js - Axios POST 表单数据在服务器端有空正文

标签 node.js express file-upload axios

这是客户端代码。数据不为空,文件正在正确上传。

export function addGame(data) {
    return dispatch => {
    const formData = new FormData();
    formData.append("game.cover", data.gameCover[0]);
    formData.append("game.title", data.gameTitle);
    formData.append("game.price", data.gamePrice);
    formData.append("game.description", data.description);

    return axios.post(apiUrl + "/games/add", formData).then(res => {
      dispatch({ type: ADD_GAME, payload: res.data.game });
    });
  };
}

这是服务器端

  router.post("/add", auth, async (req, res) => {
  const body = await req.body;
  console.log(body);
  let formErrors = [];
  if (!body.gameTitle) formErrors.push("Game title is required.");
  if (!body.description) formErrors.push("Description is required.");
  if (!body.gamePrice) formErrors.push("Price is required.");

  if (formErrors.length) res.status(400).send({ success: false, formErrors });
  else {
     let gameCoverFileName;
     if (!fileUpload(req, gameCoverFileName))
       formErrors.push("Failed to upload file");

const result = await gameModel.create({
  title: body.gameTitle,
  cover: gameCoverFileName,
  price: body.gamePrice,
  description: body.description
});
if (result)
  res.status(201).send({
    success: true,
    game: {
      gameTitle: result.title,
      gameCover: gameCoverFileName,
      gamePrice: result.price,
      description: result.description
    }
  });
} });

我的 body 越来越空

最佳答案

您需要另外处理多部分表单数据。例如 multiparty:

const multiparty = require("multiparty");

router.post("/add", auth, async (req, res) => {
    try {
        const parse = function (req) {
            return new Promise(function(resolve, reject) {
                const form = new multiparty.Form()
                form.parse(req, function(err, fields, files) {
                    !err ? resolve([fields, files]) : reject(err)
                })
            })
        }
        const [body] = await parse(req)
        console.log(body)
    } catch (err) {
        console.log(err)
    }
    res.json("ok")
})

关于node.js - Axios POST 表单数据在服务器端有空正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52167964/

相关文章:

drupal - 如何允许用户将大图像(> 5 GB)上传到 Drupal 站点?

python - 如何在 Django 中获取文件的扩展名?

angularjs - 发布http ://localhost:8082/public/fileUpload 404 (Not Found) when file upload button is clicked

javascript - 从 "abstract"基址 "class"调用构造函数

javascript - 如何正确使用 createPages API 以编程方式创建页面?

node.js - 在 Windows 上使用 npm install 时,Jenkins 脚本过早退出

node.js - 使用express-validator参数存在

node.js - 如何在for循环中使用node-schedule来调度任务?

javascript - 用于快速路由的正确正则表达式语法是什么?

c# - 如何打开目录以在其上流式传输