【发布时间】:2019-06-03 17:22:25
【问题描述】:
我正在从前端发出一个 put 请求,我一直在使用 XMLHttpRequest and FormData API 请求,但服务器端我不会得到像 req.params, req.body and req.query 这样的任何数据,都是空的
前端代码
var reportSub = () => {
var report = document.getElementById('report');
var formData = new FormData(report)
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.response)
}
}
var queryString = new URLSearchParams(formData);
xhr.open("PUT", '/threads/edit', true);
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
xhr.send(queryString)
}
var reportsub = document.querySelector('#repsub');
reportsub.addEventListener("click",(e)=>{
e.preventDefault();
reportSub();
})
服务器端代码
router.put('/threads/edit',(req,res)=>{
let board = req.body.board;
let id = req.body.id;
console.log(req.query,req.body)
Board.findById({_id: ObjectId(id)},(error,data)=>{
if(error)
res.send(error)
if(data!==null){
data.Reprot = true;
data.save((error,sd)=>{
if(error)
res.send(error)
res.send(sd);
})
}
else{
res.send({"Error":"Id does not exist "})
}
})
})
有一种解决方案是您在 url 中添加数据,该数据再次硬编码每个变量和您必须传递的数据。 所以我想使用 FormData 接口来发送数据。
【问题讨论】:
-
您可以使用
.send直接发送FormData。尝试使用xhr.send(formData)。只有req.body应该包含所需的数据。URLSearchParams不能从FormData构造,但也可用于实现此目的: -
我已经尝试过了,它会给我
empty object -
#report是表单元素吗? -
是的。我认为这里与请求标头有关
-
您是否使用任何中间件来解析请求,例如
express.json()?
标签: javascript express xmlhttprequest