Javascript 在angularjs 1.0.8中,非works放置rest服务
我有angularjs应用程序,它有CRUD Rest服务。Create、Read和Delete方法可以很好地工作,但PUT不起作用。 我在Stackoverflow上发现了与公认答案相同的问题,例如: 因此,我在回答中这样做,但我的更新(通过PUT方法)不起作用(状态代码:404‘Cannot PUT/api/advists’)。 也许人们在我的代码中注意到了一些东西。重要的一点是我使用了角度1.0.8 services.js(angularjs): editAdvert.htmlJavascript 在angularjs 1.0.8中,非works放置rest服务,javascript,node.js,rest,angularjs,express,Javascript,Node.js,Rest,Angularjs,Express,我有angularjs应用程序,它有CRUD Rest服务。Create、Read和Delete方法可以很好地工作,但PUT不起作用。 我在Stackoverflow上发现了与公认答案相同的问题,例如: 因此,我在回答中这样做,但我的更新(通过PUT方法)不起作用(状态代码:404‘Cannot PUT/api/advists’)。 也许人们在我的代码中注意到了一些东西。重要的一点是我使用了角度1.0.8 services.js(angularjs): 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>
server.js(nodejs):
作为回应,我得到了404和“无法放置/api/adverts”。
我几乎确信这是URL末尾缺少“\u id”的问题。
如图所示:
请查看我的代码并给出一些建议。我发现这里有一些不一致之处。首先,
update
应该是实例方法。因此,调用应该是这样的:$scope.editAdvert.$update(…
而不是Advert.update($scope.editAdvert…
这里的另一件事是参数名称的不同。资源被指示,资源的id应该是adverdid
,而如图所示,对象的id命名为\u id
最后,您要设置$scope.advertId=$scope.editAdvert.\u id;
…正如您所说的那样来修复它。问题是,它与对象$scope.editAdvert
…无关。它只是$scope的另一个对象。资源没有意识到它
查看有关的更多详细信息,谢谢!1.
update
不是实例方法,因为我将var editAdvert
(它有brandName
简单字符串)放在广告中。update
不是$scope.editAdvert
(我有brand
复杂对象)。我在editAdvert.html中使用$scope.Advert来处理select(请参阅代码-我已更新以向您展示)。2.建议我将代码更改为update:{method:'PUT',params:{advertId:'@_id'}
成功了!3.我删除了我的修复程序。如果您可以查看我更新的代码controllers.js
和editAdvert.html
并立即检查不一致性。当然,修复行被删除了,我在services.jsupdate:{method:'PUT',params:{advertId:'@\id'}
中更改了。很高兴看到这一点;)享受吧
<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>
$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');
});
};
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'));
});