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=
这里的问题是,我不知道如何在使用 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=