POST 请求中的查询参数丢失(nodeJS 和 Express)

Query parameters are lost from POST request (nodeJS & Express)

我第一次尝试使用 REST API 使 JavaScript 客户端和带有 Express 的 nodeJS 服务器进行通信。出于某种原因,我在 xhttp.send 中提供的任何参数在到达后端时都会丢失。

在客户端我有以下功能:

function changeStatus(station) {
  var xhttp = new XMLHttpRequest();
  xhttp.open("POST", "/api", false);
  xhttp.send(`station=${station}`);
  window.location.reload();
}

在服务器端如下:

app.post("/api", function (req, res) {
  if ("station" in req.query) {
    db[req.query.station] = !db[req.query.station];
    res.send(
      `Station ${req.query.station} changed to ${db[req.query.station]}`
    );
  } else {
    res.send("No station specified");
  }
});

无论如何我得到了'else'配置。关于做什么的任何建议?我也不知道如何记录要附加的原始请求。

查询参数没有丢失。它们不存在。查询参数在路径段后 ? 之后的 URL 上。

http://example.com?this=is&a=set&of=query&parameters=!

当您发出 POST 请求时,您传递给 send() 的值将在请求 body 中发送,可通过 [=15= 访问] 如果(根据 the documentation)你有合适的 body-parsing 中间件设置。

你还应该设置一个 Content-Type 请求头来告诉服务器如何解析你发送的正文。如果你传递一个 URLSearchParams 对象而不是字符串,XMLHttpRequest 将自动执行此操作。


Client-side代码

var xhttp = new XMLHttpRequest();
xhttp.open("POST", "/api", false);
const body = new URLSearchParams();
body.append("station", station);
xhttp.send(body);
window.location.reload();

服务器端代码

app.use(express.urlencoded());

app.post("/api", function (req, res) {
    if ("station" in req.body) {

综上所述,您正在发出 Ajax 请求,然后立即重新加载页面。

Ajax 的要点是发出请求 而无需 重新加载页面。

您不妨改用常规 <form> 提交。会更简单。