【问题标题】:AJAX POST JSON from javascript to nodejs serverAJAX POST JSON 从 javascript 到 nodejs 服务器
【发布时间】:2016-06-27 15:33:04
【问题描述】:

我正在尝试将 JSON 对象从 javaScript 发送到 node.js 服务器。我使用标准 XMLHttpRequest 从 javascript 和标准 node.js 代码发送它。

两个代码似乎可以正常通信,但是 node.js 总是给我一个空的 JSON 对象。我不确定我做错了什么。

这是我的 javascript 代码:

<html>
  <head>
    <script>
      function xhrPost() {
        var data = {"name":"John", "time":"2pm"};
        var xhr = new XMLHttpRequest();
        xhr.withCredentials = true;
        xhr.addEventListener("readystatechange", function () {
          if (this.readyState === 4) {
            console.log(this.responseText);
          }
        });

        xhr.open("POST", "http://[serverIP]:8080/addUser");
        xhr.setRequestHeader("cache-control", "no-cache");
        xhr.setRequestHeader("content-type", "application/json;charset=UTF-8");
        xhr.send(JSON.stringify(data));
      }
    </script>
  </head>

  <body onload="xhrPost()">

  </body>
</html>

这是我的 node.js 代码:

var express = require("express");
var myParser = require("body-parser");
var app = express();

  app.use(myParser.urlencoded({extended : true}));
  app.post("/addUser", function(request, response) {
      console.log(request.body); // this line allways produce {}
      response.send("Message received.");
      response.end();
});

app.listen(8080);

【问题讨论】:

    标签: javascript json ajax node.js


    【解决方案1】:

    您必须使用myParser.json() 作为中间件。在https://github.com/expressjs/body-parser#bodyparserjsonoptions 中查看更多信息

    【讨论】:

    • 我按照你的建议更改了代码,但我仍然得到一个空的 JSON 对象
    【解决方案2】:

    在以下行之后:

    var myParser = require("body-parser");
    

    你应该添加更多的行:

     var myParser = require("body-parser");
    
    app.use(myParser.json());// parse application/json
    

    【讨论】:

      【解决方案3】:

      这也是解决我的问题的最有用的 stackoverflow 页面。

      我试图获取表单字段,在客户端将它们格式化为 JSON,然后发送到服务器以使用这些字段对单独的数据库进行 MySQL 调用。

      Object {name: "", reps: "1", weight: "1", date: "", lbs: "0"}
      

      我能够在客户端上正确记录对象,但每次我尝试将数据发送到服务器时,

      console.log(req.body);
      

      总是会在服务器上返回

      {}
      undefined
      

      服务器端我的数据传递功能设置是

      var express = require('express');
      var mysql = require('./dbcon.js');
      var app = express();
      var handlebars = require('express-handlebars').create({defaultLayout:'main'});
      var request = require('request');
      var myParser = require("body-parser");
      var async = require('async');
      app.set('view engine', 'handlebars');
      app.set('port', Number(process.env.PORT || 3000));
      app.use(myParser.json());
      app.use(express.static('public'));
      app.engine('handlebars', handlebars.engine);
      

      在我的客户端 js 文件中,我在提交表单时有一个函数:

      var data = {
        "name":document.getElementById("fname").value,
        "reps":document.getElementById("freps").value,
        "weight":document.getElementById("fweight").value,
        "date":document.getElementById("fdate").value,
        "lbs":bool
      };
      ...
      req.open("POST", "/insert", true);
      req.setRequestHeader("content-type", "application/json;charset=UTF-8");
      ...
      req.send(JSON.stringify(data));
      

      【讨论】:

      • 这看起来像另一个问题。
      猜你喜欢
      • 2015-02-09
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      相关资源
      最近更新 更多