【问题标题】:The req.body is always {} when sending post data through fetch api to a controller当通过 fetch api 向控制器发送 post 数据时,req.body 始终为 {}
【发布时间】:2017-05-07 21:03:25
【问题描述】:

我正在尝试处理控制器中的所有发布请求,以及来自另一个控制器的所有导航。从表单所在的 index.ejs 文件中,我有一个文本输入和一个提交按钮,我正在向同一个文件 ('/index') 发出 fetch post 请求;

我的观点是这样的:

<form id='message'>
    <input type='text' id='message' placeholder='Type a Message' name="message" />
    <button id='send'>Send</button>
  </form>

单击提交按钮时,我正在触发一个获取请求以将数据发布到同一个文件, 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');
  })
}

我定义了一个控制器来处理发布请求:

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 文件运行每个请求?

【问题讨论】:

    标签: javascript node.js request fetch-api body-parser


    【解决方案1】:

    您尝试发送的 JSON 格式不正确;您需要在键名周围添加引号:

    var data = {
      "message": msg,
      "sender": usr,
      "time": new Date()
    }
    

    是的,对不起,那是错误的。我想你只需要使用JSON.stringify:

    body: JSON.stringify(msg_data)
    

    【讨论】:

    • 还是空的。
    • { 消息:{'0':{'0':{},'1':{}},'1':{},消息:{'0':{},' 1': {} } }, sender: 'user', time: '2017-05-07T13:12:27.595Z' } 访问首页,消息文字变成乱码??但至少我得到了回应......现在我为那个错误感到愚蠢......顺便说一句谢谢
    • 现在我没有收到消息部分,只有发件人和时间。
    • 我想说,我认为在你提供给 JSON.stringify 的内容中,你可能还需要省略成员之间的逗号,但我认为实际上可能不是这样......
    • 是的,JSON obj 在 props 之间确实有逗号
    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    相关资源
    最近更新 更多