使用 $resource 在 transformRequest 中未定义数据
data is undefined in transformRequest using $resource
我正在使用 MEAN 进行一个小项目,以便开始使用它。我一直在关注 thinkster.io 上的教程(我做了一些小的修改),到目前为止我已经取得了很好的效果。我已经用 Postman 测试了 API 路由,一切正常。问题是,出于某种原因(请记住我是 NodeJS 的新手),它只接受带有 Content-type: x-www-form-urlencoded 的请求。
我多次遇到的解决方案是更改 $resource 的选项参数中的 headers。这是我的代码
register: function(user){
var deferred = $q.defer();
var UserResource = $resource('/api/users/register', {}, {
save: {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
transformRequest: function (data, headersGetter) {
console.log(data); // data is undefined ??
var str = [];
for (var d in data)
str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
return str.join("&");
}
}
});
UserResource.save(function(user){
this.saveToken(user.token);
deferred.resolve(user);
}, function(user){
deferred.reject(user);
});
return deferred.promise;
}
在 angular 服务上声明了注册函数。问题是后端向我发送错误,因为 req.body object 是空的。这是因为 transformRequest 方法没有正确执行。进行一些调试后,我发现 'data' 参数未定义。
这是后端的代码
router.post('/register', function(req, res, next){
if(!req.body.username || !req.body.password){
console.log(req.body.username);
return res.status(400).json({message: 'Por favor llene todos los campos'});
}
var user = new User();
user.username = req.body.username;
user.fullname = req.body.fullname;
user.setPassword(req.body.password);
user.save(function (err){
if(err){ return next(err); }
return res.json({token: user.generateJWT()})
});
});
如有任何想法,我们将不胜感激。提前致谢
您应该在 save
方法的第一个参数中传递 user
数据(这将通过请求 body
),之后您可以放置 successCallback
& errorCallback
UserResource.save(user, function(user){
this.saveToken(user.token);
deferred.resolve(user);
}, function(user){
deferred.reject(user);
});
我正在使用 MEAN 进行一个小项目,以便开始使用它。我一直在关注 thinkster.io 上的教程(我做了一些小的修改),到目前为止我已经取得了很好的效果。我已经用 Postman 测试了 API 路由,一切正常。问题是,出于某种原因(请记住我是 NodeJS 的新手),它只接受带有 Content-type: x-www-form-urlencoded 的请求。
我多次遇到的解决方案是更改 $resource 的选项参数中的 headers。这是我的代码
register: function(user){
var deferred = $q.defer();
var UserResource = $resource('/api/users/register', {}, {
save: {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
transformRequest: function (data, headersGetter) {
console.log(data); // data is undefined ??
var str = [];
for (var d in data)
str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
return str.join("&");
}
}
});
UserResource.save(function(user){
this.saveToken(user.token);
deferred.resolve(user);
}, function(user){
deferred.reject(user);
});
return deferred.promise;
}
在 angular 服务上声明了注册函数。问题是后端向我发送错误,因为 req.body object 是空的。这是因为 transformRequest 方法没有正确执行。进行一些调试后,我发现 'data' 参数未定义。 这是后端的代码
router.post('/register', function(req, res, next){
if(!req.body.username || !req.body.password){
console.log(req.body.username);
return res.status(400).json({message: 'Por favor llene todos los campos'});
}
var user = new User();
user.username = req.body.username;
user.fullname = req.body.fullname;
user.setPassword(req.body.password);
user.save(function (err){
if(err){ return next(err); }
return res.json({token: user.generateJWT()})
});
});
如有任何想法,我们将不胜感激。提前致谢
您应该在 save
方法的第一个参数中传递 user
数据(这将通过请求 body
),之后您可以放置 successCallback
& errorCallback
UserResource.save(user, function(user){
this.saveToken(user.token);
deferred.resolve(user);
}, function(user){
deferred.reject(user);
});