【问题标题】:Displaying the angularjs posted data at node js using express使用 express 在节点 js 上显示 angularjs 发布的数据
【发布时间】:2016-04-11 18:50:14
【问题描述】:

在角度方面,我使用 post 方法传递了数据。

var data = {
  'id': mydata.google_id,
  'token': mydata.token,
  'email': mydata.email,
  'name': mydata.name
}; 

$http.post('http://localhost:3000/login1',data,config)
     .success(function (data, status, headers, config) { ... })
     .error(function (data, status, header, config) { ... });

在服务器端尝试访问我使用req.body.id 发布的数据,但我不能

当我在控制台中显示req.body 时,我得到了以下响应:

{ ' {"id" : "1234" , "email" : "xyz@gmail.com" , "name" : "xyz"}' : '  ' [_proto_] : { } }

帮我解决这个错误

【问题讨论】:

    标签: angularjs node.js express google-api-nodejs-client


    【解决方案1】:

    正在使用哪个版本的 express? 尝试使用解析请求正文

    app.use(bodyParser());
    

    【讨论】:

      【解决方案2】:

      查看您的控制台日志,对象属性名称似乎是字符串(注意属性名称周围的双引号)。

      你应该这样设置你的对象:

      var data = {
          id: mydata.google_id,
          token: mydata.token,
          email: mydata.email,
          name: mydata.name 
      };
      

      在对象字面量初始化中不引用属性名称(如果这不是您需要的 :-)。

      查看此链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        看起来您可能启用了bodyParser,但您需要使用以下命令启用bodyParser.json() 中间件:

        var express = require('express');
        var app = express();
        
        var bodyParser = require('body-parser');
        var cors = require('cors');
        
        app.use(cors());
        
        // parse application/json
        app.use(bodyParser.json());
        
        app.post('/meow', function(req, res) {
          console.dir(req.body);
          res.send(req.body);
        });
        
        app.listen(8181);
        

        这将允许您发布自己的现状,但可以让您直接访问req.body 属性(相对于原始字符串正文)。最终,Anuglar 的 $http.post() 方法会将您的 javascript data 对象转换为 JSON,然后再将其发送到您的服务器。

        var data = {
          id: mydata.google_id,
          token: mydata.token,
          email: mydata.email,
          name: mydata.name
        };
        
        var config = {
          headers: {}
        };
        
        $http.post('http://localhost:8181/meow', data, config);
        

        【讨论】:

        • 感谢您的建议。我已经尝试过,但它仍然只是这样占用身体部分,无法解决问题。
        • 当我从邮递员插件调用 api 时,我可以获得正确的响应。所以我认为问题出在角度方面。我尝试了从谷歌找到的所有方法,但我做不到。
        • 你在 Angular 中有什么东西覆盖了Content-Type 标头吗?我们在您的帖子中有data 对象,但您传递的config 对象是什么样的?
        • 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'这就是标题要包含的内容
        • @valarmathi 有什么特别的理由使用Content-Type吗?从config 中删除它可能会解决您的问题(前提是您继续使用bodyParser.json())。我在示例中添加了更多细节,在本地测试时有效
        猜你喜欢
        • 2019-01-26
        • 1970-01-01
        • 2017-08-22
        • 2015-11-25
        • 1970-01-01
        • 2020-08-14
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多