簡體   English   中英

查詢參數從 POST 請求中丟失(nodeJS 和 Express)

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

我第一次嘗試使用 REST API 使 JavaScript 客戶端和 nodeJS 服務器與 Express 進行通信。出於某種原因,我在xhttp.send中提供的任何參數在到達后端時都會丟失。

在客戶端,我有以下 function:

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");
  }
});

無論如何,我得到了“其他”配置。 關於做什么的任何建議? 我也不知道如何記錄要附加的原始請求。

查詢參數不會丟失。 它們不存在。 查詢參數 go 在 URL 之后? 在路徑段之后。

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

當您發出 POST 請求時,您傳遞給send()的值將在請求正文中發送,如果(根據文檔)您設置了合適的正文解析中間件,則可以通過req.body訪問該正文。

您還應該設置一個Content-Type請求 header 來告訴服務器如何解析您發送的正文。 如果您傳遞URLSearchParams object 而不是字符串, XMLHttpRequest將自動執行此操作。


客戶端代碼

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>提交。 這會更簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM