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¶meters=!
当您发出 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>
提交。会更简单。
我第一次尝试使用 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¶meters=!
当您发出 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>
提交。会更简单。