2015-08-15 50 views
0

我有一个基本的工厂返回称为用户$资源:

angular.module('appServices').factory('User', [ 
    '$resource', 
    function($resource){ 
    return $resource('http://localhost:3000/users/:username', {username:'@username'}); 
}]); 

在我UserController.js文件我尝试做一些非常简单:

angular.module("myApp").controller('UserController', ['$scope', '$routeParams', 'User', 
    function($scope, $routeParams, User){ 

     var user = new User({email:'[email protected]', username: 'johndoe', password: 'mySecurePassw0rd!'}); 
     user.$save(); 

}]); 

我希望$save()功能,使POST请求/users,但在控制台中我得到http://localhost:3000/users/johndoe 404响应,因为路线显然是不成立的服务器与附加username参数POST请求在...

为什么它在我的代码示例中这样做?从我在互联网上看到的例子中,$save()函数没有考虑用户名,并且应该直接POST到/users对我来说。

任何帮助,将不胜感激!

编辑

我想我得到了错误(一如既往,张贴这样的问题......之后)

这可能是因为我在$资源指定的默认参数{username: "@username"}的,因为它预计默认情况下有一个用户名参数?

所以正确的方式做这将是从工厂返回此资源:

return $resource('http://localhost:3000/users/:username'); 

是否正确?

回答

0

用户名是自然主键。除非您使用切换到代理服务器(在服务器端生成),否则您将需要两种不同的方法来创建和更新实体:

var User = $resource(
    '/users/:username', 
    { 
     username: '@username' 
    }, 
    { 
     save: { 
      methods: 'POST', 
      url: '/users' 
     }, 
     update: { 
      method: 'PUT' 
     } 
    } 
);