【问题标题】:Express post not receive JSON data [close]快递收不到 JSON 数据 [关闭]
【发布时间】:2022-01-11 02:33:31
【问题描述】:

我遇到了这个问题,因为我使用 XMLHttpRequest 通过 JavaScript 发送数据,但没有在 node.js express post 方法中接收它。我不知道我做错了什么。

我的脚本 - 函数表单在窗口加载时执行

function form() {
  const btn = document.getElementById("save-data");
  let currentPage = window.location.href.split("/").at(-1);

  function sendData(data) {
    const XHR = new XMLHttpRequest();
    XHR.open("POST", window.location.href);
    XHR.setRequestHeader("Content-Type", "application/json");
    console.log(data); // I get right data
    XHR.send(data);
  }

  btn.addEventListener("click", () => {
    switch (currentPage) {
      case "settings":
        const prefix = document.getElementById("prefix").value;
        let buttonState = document.getElementById("module-state");

        if (buttonState.hasAttribute("enable")) {
          buttonState = "enable";
        } else {
          buttonState = "disable";
        }

        sendData({
          prefix: prefix,
          buttonState: buttonState,
          announcements: {
            giveawayChannelID: 123,
            updateChannelID: 123,
          },
        });
    }
  });
}

我的 Node.js 代码

router.post('/:id/settings', (req, res) => {
   console.log(req.body) // {}
})

请帮忙。

【问题讨论】:

  • 您可能会发现 Fetch API 更易于使用。它在浏览器中得到很好的支持。多年来,我们通常不需要 XHR。 :-)
  • 您是否在 Express 中启用了正文解析器?
  • 不,我不启用此功能。怎么办?
  • send 函数不接受对象,它会被转换成字符串'[object Object]' 解析时会出错。确保使用XHR.send(JSON.stringify(data));

标签: javascript node.js json express post


【解决方案1】:

你需要通过 NPM 安装 body-parser 包,并在你的代码中需要它

试试

npm i body-parser

然后在你的主节点脚本中,要求它

const bodyParser = require('body-parser');

之后,您应该将其设置为 express 的中间件

app.use(bodyParser.json()); //Handles JSON requests
app.use(bodyParser.urlencoded({ extended: false })); //Handles normal post requests

在这些步骤之后,您可以访问像req.body.value这样的值

【讨论】:

  • 这些天您可以使用express.json()express.urlencoded()。不再需要单独的包装。 (Express 开发人员在几年前确实将其拆分,但后来决定将其重新合并。)
  • 我正在开发一个节点项目 rn。上周我想将这两个与 express 一起使用,但我遇到了错误。我不得不使用它自己的包。
  • 感谢您的回答
猜你喜欢
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2021-05-23
相关资源
最近更新 更多