Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在angularjs 1.0.8中,非works放置rest服务_Javascript_Node.js_Rest_Angularjs_Express - Fatal编程技术网

Javascript 在angularjs 1.0.8中,非works放置rest服务

Javascript 在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 &

我有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.js
update:{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'));
});