通过 fetch api 向控制器发送 post 数据时,req.body 始终为 {}
The req.body is always {} when sending post data through fetch api to a controller
我正在尝试处理一个控制器中的所有 post 请求,以及来自另一个控制器的所有导航。从表单所在的 index.ejs 文件中,我有一个文本输入和一个提交按钮,我正在向同一文件 ('/index');
我的观点是这样的:
<form id='message'>
<input type='text' id='message' placeholder='Type a Message' name="message" />
<button id='send'>Send</button>
</form>
点击提交按钮,我正在向同一文件发送 post 数据的提取请求,
JS 看起来像这样:
btn.onclick = ()=>{
var msg = document.getElementById('message').value;
var data = {
message : msg,
sender : usr,
time : new Date()
}
send_to_server(data);
display_and_cache(data);
}
function send_to_server(msg_data){
console.log(msg_data);
fetch('/index',{
method : 'POST',
body : msg_data,
headers : new Headers({
'Content-type' : 'application/json'
})
}).then(()=>{
console.log('sent the post request');
})
.catch((err)=>{
console.log('can\'t fetch');
})
}
我定义了一个控制器来处理 post 请求:
module.exports = (app)=>{
var bodyParser = require('body-parser');
var urlencoded = bodyParser.urlencoded({extended : false});
var json = bodyParser.json();
app.use(bodyParser.json());
// Control for message sending to the server.
app.post('/index',(req,res)=>{
console.log('request recieved');
var resp = {
status : 200,
ok : true,
}
console.log(req.body);
res.send(resp);
})
}
但是,req.body 总是 = {};
我搜索了解决方案并尝试了其中的大部分,但我仍然得到 {};
我是否必须 运行 通过我的 app.js 文件发送每个请求?
您尝试发送的 JSON 格式错误;您需要在键名周围添加引号:
var data = {
"message": msg,
"sender": usr,
"time": new Date()
}
是的,对不起,那是错误的。我想你只需要使用 JSON.stringify
:
body: JSON.stringify(msg_data)
我正在尝试处理一个控制器中的所有 post 请求,以及来自另一个控制器的所有导航。从表单所在的 index.ejs 文件中,我有一个文本输入和一个提交按钮,我正在向同一文件 ('/index');
我的观点是这样的:
<form id='message'>
<input type='text' id='message' placeholder='Type a Message' name="message" />
<button id='send'>Send</button>
</form>
点击提交按钮,我正在向同一文件发送 post 数据的提取请求, JS 看起来像这样:
btn.onclick = ()=>{
var msg = document.getElementById('message').value;
var data = {
message : msg,
sender : usr,
time : new Date()
}
send_to_server(data);
display_and_cache(data);
}
function send_to_server(msg_data){
console.log(msg_data);
fetch('/index',{
method : 'POST',
body : msg_data,
headers : new Headers({
'Content-type' : 'application/json'
})
}).then(()=>{
console.log('sent the post request');
})
.catch((err)=>{
console.log('can\'t fetch');
})
}
我定义了一个控制器来处理 post 请求:
module.exports = (app)=>{
var bodyParser = require('body-parser');
var urlencoded = bodyParser.urlencoded({extended : false});
var json = bodyParser.json();
app.use(bodyParser.json());
// Control for message sending to the server.
app.post('/index',(req,res)=>{
console.log('request recieved');
var resp = {
status : 200,
ok : true,
}
console.log(req.body);
res.send(resp);
})
}
但是,req.body 总是 = {}; 我搜索了解决方案并尝试了其中的大部分,但我仍然得到 {};
我是否必须 运行 通过我的 app.js 文件发送每个请求?
您尝试发送的 JSON 格式错误;您需要在键名周围添加引号:
var data = {
"message": msg,
"sender": usr,
"time": new Date()
}
是的,对不起,那是错误的。我想你只需要使用 JSON.stringify
:
body: JSON.stringify(msg_data)