首页 > 解决方案 > 我无法让我的 Ajax jquery 发布请求正确发送对象?

问题描述

我正在尝试执行 POST 请求,但我的服务器一直告诉我我没有正确发送值?

这会检查必填字段,如果缺少则返回错误,它一直说请求正文中缺少名称。

这是在我的路由器上:

router.post('/', jsonParser, (req, res) => {
  const requiredFields = ['name', 'size', 'prices'];
  for (let i = 0; i < requiredFields.length; i++) {
    const field = requiredFields[i];
    if (!(field in req.body)) {
      const message = `Missing \`${field}\` in request body`;
      console.error(message); // responds missing `name` in request body
      return res.status(400).send(message);
    }
  }

  StoredProduct.create({
    name: req.body.name,
    size: req.body.size,
    prices: req.body.prices
  }).then(item => {
    res.status(201).json(item);
  }).catch(err => {
    console.log(err);
    res.status(500).json({
      error: err
    });
  });

});

然后这是我的 AJAX 请求:

$('#addItemButton').on('click', function() {
  console.log($addProductName.val()); //works correctly
  console.log($addProductUnit.val()); //works correctly 
  console.log($addPrice1.val()); //works correctly
  console.log($addPrice2.val()); //works correctly
  console.log($addPrice3.val()); //works correctly
  var newProd = {
    name: $addProductName.val(),
    size: $addProductUnit.val(),
    prices: [{
        price: $addPrice1.val()
      },
      {
        price: $addPrice2.val()
      },
      {
        price: $addPrice3.val()
      }
    ]
  };

  $.ajax({
    type: 'POST',
    url: '/storedproducts',
    data: newProd,
    success: function(newProd) {
      console.log(`${newProd} created`);
    },
    error: function() {
      alert(`didn't work item: ${newProd}`); // responds didn't work item: [object Object]
    }
  });

});

服务器响应为 400(错误请求),在我的服务器日志中显示"Missing名称in request body

标签: javascriptnode.jsajaxapi

解决方案


我正在使用 body-parser,我需要将以下内容添加到我的主 server.js 文件中以正确发送数据。

app.use(bodyParser.urlencoded({extended: true })); app.use(bodyParser.json());


推荐阅读