You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS v1.4中ngResource save出现404错误的解决咨询

AngularJS 1.4 ngResource.save() 返回404错误的解决方案

看起来你遇到的问题核心是静态JSON文件无法处理POST/PUT请求,再加上$resource的默认行为导致请求URL指向了不存在的文件。让我一步步帮你分析和解决:

问题根源

你在eventData的save方法里手动给event设置了id:999,而AngularJS的$resource默认逻辑是:如果对象包含id属性,它会把这个id填充到URL模板data/event/:id.json里,最终发送请求到data/event/999.json——但这个文件显然不存在,所以返回404。

另外,静态JSON文件本身只能响应GET请求,无法处理POST或PUT(这是静态文件服务器的限制),所以即使URL正确,你也无法真正"保存"数据到本地JSON文件里。

解决方案(针对教程模拟场景)

因为你是跟着旧教程学习,不需要真正的后端接口,我们可以用两种方式解决:

1. 模拟保存成功,跳过实际HTTP请求

修改你的EventData.js,直接返回一个已resolved的Promise来模拟保存成功,这样既符合教程的逻辑,又不会触发404错误:

eventsApp.factory('eventData', function ($resource, $q) {
  var resource = $resource('data/event/:id.json', { id: '@id' }, {
    "getAll": { method: "GET", isArray: true, params: { something: "foo" } }
  });

  return {
    getEvent: function () {
      return resource.get({ id: 1 });
    },
    save: function (event) {
      // 模拟保存成功,直接返回resolved promise
      return {
        $promise: $q.resolve({ message: 'Event saved successfully!' })
      };
    }
  }
});

2. 自定义$resource的save动作,强制请求到固定路径

如果你想保留实际的HTTP请求(用于验证URL是否正确),可以给$resource添加自定义的save配置,跳过id占位符:

eventsApp.factory('eventData', function ($resource) {
  var resource = $resource('data/event/:id.json', { id: '@id' }, {
    "getAll": { method: "GET", isArray: true, params: { something: "foo" } },
    // 自定义save动作,指向不带id的基础路径
    "save": { method: "POST", url: "data/event.json" }
  });

  return {
    getEvent: function () {
      return resource.get({ id: 1 });
    },
    save: function (event) {
      // 不需要设置event.id,让请求发送到data/event.json
      return resource.save(event);
    }
  }
});

注意:静态服务器对POST请求到data/event.json仍会返回404,但这是正常的——因为静态文件无法处理写入操作,后续如果接入真实后端,只需要把URL改成后端API地址即可。

额外说明

旧教程里的代码可能假设存在后端API来处理save请求,而不是静态JSON文件,所以你需要根据自己的学习环境调整。如果需要本地模拟可写入的后端,可以使用json-server工具(但这属于额外工具,旧教程可能没涉及)。

内容的提问来源于stack exchange,提问作者Tonks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:37:31