【问题标题】:Extracting of HTTP Post in Node Express doesn't work在 Node Express 中提取 HTTP Post 不起作用
【发布时间】:2021-06-16 22:14:50
【问题描述】:

我只是想提取一个 http-Post 但我没有让它工作。有人可以帮我吗?该请求是由我的 HTML 前端使用 XMLHttpRequest() 发出的,后端是 node.js。当我发送请求时,我只得到一个空对象 {}

节点后端

var express = require('express');
const bodyParser = require('body-parser');
var app = express();

app.use(express.json());

app.post('/save_options', (req, res) => {
    console.log(req.body);
    res.sendStatus(200);
});

前端

let DATA_FRONTEND_OPTIONS = {
  "test":"1"
}

function save_options_to_database() {
  var do_it_async = true;

  var request = new XMLHttpRequest();

  request.onload = function () {
    var status = request.status;
    var data = request.responseText;
  }

  request.open("POST", "/save_options", do_it_async);

  request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
  //request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");

  request.send(JSON.stringify(DATA_FRONTEND_OPTIONS));
}

【问题讨论】:

    标签: javascript node.js rest express request


    【解决方案1】:

    只需添加 app.use(express.urlencoded()); 到您的快速配置。

    这里有很好的解释: https://stackoverflow.com/a/51844327/8522881

    【讨论】:

      【解决方案2】:

      您必须为 POST 请求添加 express.json()express.urlencoded()

      示例:

      app.use(express.json());
      app.use(express.urlencoded());
      

      因为在 POST 请求中发送的数据是以某种数据对象的形式发送的,您必须告诉服务器接受或存储该类型的数据(对象),它包含在您的 POST 请求的正文中.

      同样的解决方案也适用于 PUT 请求。

      【讨论】:

      • 谢谢,我让它工作了,但没有使用 app.use(express.urlencoded())。我真的需要两者吗?
      • 根据您发送的数据,您必须使用。 express.json() 将传入的请求对象识别为 JSON 对象express.urlencoded() 将传入的请求对象识别为字符串或数组
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 2017-06-23
      • 2017-04-19
      • 2021-11-27
      • 2011-12-23
      • 1970-01-01
      相关资源
      最近更新 更多