Javascript-在angularjs 1.0.8中不起作用PUT REST服务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript-在angularjs 1.0.8中不起作用PUT REST服务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3096字,纯文字阅读大概需要5分钟。
内容图文
![Javascript-在angularjs 1.0.8中不起作用PUT REST服务](/upload/InfoBanner/zyjiaocheng/659/3d3f86aef4024bb3b124c7baa5c6585f.jpg)
我有具有CRUD Rest服务的angularjs应用程序.创建,读取和删除方法效果很好,但PUT效果不佳.
我在Stackoverflow上发现了同样的问题,并且答案也被接受,例如:
Angular JS: Full example of GET/POST/DELETE/PUT client for a REST/CRUD backend?
AngularJS – PUT method not working (404 error)
因此,我像在此答案中那样进行操作,但是我的更新(通过PUT方法)不起作用(状态代码:404’无法PUT / api / adverts’).
也许人们注意到了我的代码中的某些内容.一件重要的事是我使用角1.0.8
services.js(angularjs):
var motoAdsServices = angular.module('motoAdsServices', ['ngResource']);
motoAdsServices.factory('Advert', ['$resource', function($resource) {
return $resource('/api/adverts/:advertId', {}, {
update: {method:'PUT', params: {advertId: '@advertId'}}
});
}]);
editAdvert.html
<label class="control-label">Brand</label>
<div class="controls">
<select name="brand" ng-model="editAdvert.brand" required ng-options="b.name for b in brands">
<option value=""></option>
</select>
</div>
<label class="control-label">Model</label>
<div class="controls">
<select name="model" ng-model="editAdvert.model" required ng-options="m.name for m in editAdvert.brand.models">
<option value=""></option>
</select>
</div>
controllers.js(angular.js-我未删除任何重要代码):
$scope.updateAdvert = function() {
var editAdvert = {
_id: $scope.editAdvert._id,
brandName: $scope.editAdvert.brand.name,
modelName: $scope.editAdvert.model.name,
year: $scope.editAdvert.year,
price: $scope.editAdvert.price,
imageUrl: $scope.editAdvert.imageUrl,
countryName: $scope.editAdvert.country.name,
regionName: $scope.editAdvert.region.name
};
// !!! I TRY THIS TO FIX !!!
$scope.advertId = $scope.editAdvert._id;
// !!! THIS NOT WORKS STILL !!!
Advert.update(editAdvert, function() {
previousAdvert = angular.copy($scope.editAdvert);
alert('Advert updated');
});
};
server.js(nodejs):
var express = require('express');
var path = require('path');
var http = require('http');
var adverts = require('./routes/adverts');
var app = express();
app.configure(function() {
app.set('port', process.env.PORT || 3000);
app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
});
app.get('/api/adverts', adverts.findAll);
app.get('/api/adverts/:id', adverts.findById);
app.post('/api/adverts', adverts.add);
app.put('/api/adverts/:id', adverts.update);
app.delete('/api/adverts/:id', adverts.remove);
http.createServer(app).listen(app.get('port'), function() {
console.log("Express server listening on port " + app.get('port'));
});
作为响应,我得到404和’Cannot PUT / api / adverts’.
我几乎确信这是URL末尾缺少’_id’的问题.
看图片:
请查看我的代码并提出一些建议.
解决方法:
我在这里看到一些不一致之处.首先,更新应该是实例方法.因此调用应如下所示:$scope.editAdvert.$update(…而不是Advert.update($scope.editAdvert …
这里的另一件事是参数名称的区别.指示资源,该资源的ID应为advertId,如图所示,该对象的ID为_id
最后,您要设置$scope.advertId = $scope.editAdvert._id; …如您所说的修复它.问题是,它与$scope.editAdvert对象无关……它只是$scope的另一个对象.资源不知道它.
查看有关ngResource here的更多详细信息
内容总结
以上是互联网集市为您收集整理的Javascript-在angularjs 1.0.8中不起作用PUT REST服务全部内容,希望文章能够帮你解决Javascript-在angularjs 1.0.8中不起作用PUT REST服务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。