Angular $resource create action undefined не является объектом

У меня есть рабочий RESTful API, протестированный с Postman, а также порт GET работает в моем приложении.

Однако, когда дело доходит до вставки, в консоли возникает следующая ошибка:

Error: undefined is not an object (evaluating 'newrecipeService.create')

Я использую следующую фабрику для создания действия:

app.factory('newrecipeService', function ($resource) {
  return $resource('/api/recipes/', {}, {
   create: {method: 'POST'}
  });
});

И следующий контроллер:

app.controller('FormController', ['$scope',function($scope,newrecipeService){
  $scope.addRecipe = function() {
    newrecipeService.create({name: 'Test', nameID: 'test', category: 'TestCat', categoryID: 'testcat'});
  };
}]);

Я передаю контроллер своему представлению с помощью маршрута. Я вызываю действие addRecipe с помощью кнопки и ng-click:

ng-click="addRecipe()

Не могли бы вы помочь мне в этом?


person Ben S    schedule 10.01.2016    source источник


Ответы (1)


По сути, вы пропустили ввод newrecipeService в свою функцию контроллера, поэтому в вашем случае newrecipeService не определено. В этом случае у вас должна быть ошибка получения в консоли.

app.controller('FormController', ['$scope',function($scope,newrecipeService){

следует изменить на

app.controller('FormController', ['$scope', 'newrecipeService' ,
    function($scope,newrecipeService){

Изменить

Для получения данных на стороне сервера вам необходимо изменить свойства объекта, чтобы получить их на стороне сервера, сопоставив имя свойства.

app.controller('FormController', ['$scope',function($scope,newrecipeService){
  $scope.addRecipe = function() {
    newrecipeService.create({
       newRecN‌​ame: 'Test', 
       newRecNameID: 'test', 
       newRecCategory: 'TestCat', 
       newRecIngredients: 'someIngredients',
       newRecMethod: 'someRecMethod'
    });
  };
}]);
person Pankaj Parkar    schedule 10.01.2016
comment
Это решило проблему с ошибкой консоли. Я принимаю ваш ответ. Спасибо. Однако он по-прежнему не публикуется в моей базе данных. Как я уже сказал, API хорош, я делаю ошибку во внешнем интерфейсе. Любая идея с этим? - person Ben S; 10.01.2016
comment
@BenS делает так, чтобы все ваши свойства на стороне сервера и на стороне клиента соответствовали этому имени, например, name может быть Name на стороне сервера .. не могли бы вы еще раз проверить это .. - person Pankaj Parkar; 10.01.2016
comment
Это столбцы в mysql: cl.ly/3C451a1b3B2c И это REST.js: так что в остальном я используйте эти пары: имя, req.body.newRecName и т. д. соответственно. - person Ben S; 10.01.2016
comment
@BenS, глядя на имя столбца ... это выглядит нормально ... но все еще думает, что где-то это беспорядок ... разве у вас нет модели для объектов БД на стороне сервера? - person Pankaj Parkar; 10.01.2016
comment
Я не уверен, что вы подразумеваете под моделью для объектов БД, но вот соответствующий REST API: ``` router.post(/recipes,function(req,res){ var query = INSERT INTO recipes (??,? ?,??,??,??,??) ЗНАЧЕНИЯ (?,?,?,?,?,?); var table = [имя,имяID,категория,категорияID,ингредиенты,метод,req.body.newRecName ,req.body.newRecNameID,req.body.newRecCategory,req.body.newRecCategoryID,req.body.newRecIngredients,req.body.newRecMethod];запрос = mysql.format(запрос,таблица);connection.query(запрос,функция (ошибка, строки) { ``` - person Ben S; 10.01.2016
comment
@PlankajParkar, спасибо, я тем временем понял и сделал это. Оно работает. Спасибо Вам большое. - person Ben S; 10.01.2016
comment
@BenS рад помочь вам .. проголосуйте, если это помогло .. Спасибо за признательность :) - person Pankaj Parkar; 10.01.2016