[英]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¶meters=!
当您发出 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.