angularJS ngResource在对服务器进行http请求操作时,如何将变量传递给expressJS?

How angularJS ngResource pass variables to expressJS when doing http request operations to server?

这里的问题是,我不知道如何在使用 ngResource 时将一些 scope.data 传递给 expressjs,因此它可以与 express route 一起使用以将某些内容插入数据库。

ExpressJS REST

 router.route('/Data')
    .get(function(req,res){
     var username = req.username;
     var collection = db.collection('users');
   collection.find({username:username}).toArray(function (err, doc){
       res.send(doc[0].pets);
   });
 })
   .post(function(req,res){

  !!//I would like to use some data from angular here//!!
    var name = req.body.name;
    var surname = req.bodysurname;

    collection.update({username: username}, {
        $push: {
            "details": {
                name: name,
                surname: surname
             }
         }
     }, function (err, result) {
         if (err) throw err;          
      });
    });

Angular工厂

 (function() {
   'use strict';

 angular
     .module('App')
     .factory('Factory', function ($resource) {
         return $resource("/Data",{},
             { get:{ method:"GET",
                     cache:true,
                     isArray:true},
              save:{ method:"POST",
                     cache:true,
                     isArray:false
               }});
        });
    })();

Controller.js

这个很好用我把这个函数和 ng-click() 一起使用

$scope.load = function(){
        Factory.get(function (data){
           $scope.data = data;
        });
    };

关于这个我有问题我有 ng-models 名称和姓氏在视图中,我想将它们发送到服务器以便它可以在 REST 路由中用作 req.body.name 和 req.body.surname .

 $scope.AddData = function(){
        Factory.save()
        }); 
      };

我认为AddData这个函数应该在这里传递数据,但是我还没有成功。

所以我按照耶稣所说的尝试但没有结果?

 $scope.AddData = function(){
       Factory.save($scope.name) //I tried ({name:$scope.name}) too
     }); 
    };

根据 Jesús Quintana 的建议,我检查了方法 POST 的细节,发现 angular 端一切正常,我缺少服务器 Express 端的正文解析器扩展

  app.use(bodyParser.json())

所以现在看起来像这样

  app.use(bodyParser.urlencoded({extended: true}));
  app.use(bodyParser.json());

NgResource 的工作方式类似于 class,具有私有和 public 方法:

例如 Factory.save() 是一个 public 方法,您必须传递要存储在服务器中的数据,例如:

$scope.AddData = function(factoryData){
    Factory.save(factoryData);
    }); 
  };

但也有一个私有方法和上面的例子是一样的:

$scope.AddData = function(factoryData){
    var factory = new Factory(factoryData); 
    factory.$save(); // Is the same method but is private because factory is a instance of the factory
    }); 
  };

两个示例都是有效的方法,但必须以不同的方式使用。

编辑

我创建了这个小插件来查看网络请求:http://plnkr.co/edit/1bdblyrsW0jr7rXIAVNn?p=