【问题标题】:AngularJS $resource service's $save() POSTs to incorrect routeAngularJS $resource 服务的 $save() POST 到不正确的路由
【发布时间】:2015-08-15 22:04:23
【问题描述】:

我有一个基本的工厂返回一个名为 User: 的 $resource:

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:'user@example.com', username: 'johndoe', password: 'mySecurePassw0rd!'});
      user.$save();

}]);

我希望 $save() 函数向 /users 发出 POST 请求,但是在控制台中我得到 http://localhost:3000/users/johndoe 404 响应,因为显然没有在服务器上为带有 username 参数的 POST 请求设置路由追加...

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

任何帮助将不胜感激!

编辑

我想我得到了错误(一如既往,在 SO 上发布问题后立即...)

可能是因为我在$resource中指定的默认参数{username: "@username"},因为它希望默认有一个用户名参数?

所以正确的做法是从工厂返回这个资源:

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

正确吗?

【问题讨论】:

    标签: angularjs ngresource


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 2013-11-04
      • 2023-03-14
      • 2014-02-08
      • 2016-09-30
      • 2014-12-20
      相关资源
      最近更新 更多