Sails.js AngularJS — получение данных из Sails в Angular

#node.js #angularjs #sails.js

#node.js #angularjs #sails.js

Вопрос:

Я пытаюсь разобраться в наилучшем способе сделать это, поэтому буду признателен за любую помощь.

Если вы нажмете на эту ссылку «/comment/ {threadid} {независимо от названия комментария}», Sails перейдет и получит содержимое ThreadId из базы данных. Как только он захватит эти данные, он отправит их в Angular, и Angular отобразит их.

Это приложение CRUD, которое должно быть одностраничным приложением.

Любое направление было бы полезно, поскольку я не на 100% контролирую поток документа. Я продолжаю путаться в том, какой маршрутизатор (Angular или Sails) должен принимать URI.

Спасибо!

Ответ №1:

Вы пробовали angular-sails-bind для привязки моделей sails к моделям angular scope? (https://github.com/diegopamio/angular-sails-bind). Я сделал это для своего собственного проекта, а затем решил поместить его в отдельную библиотеку, чтобы все могли извлечь выгоду, и я мог бы получить свой первый опыт разработки пакета bower.

По сути, он создает CRUD в реальном времени (сокет) для вашего клиента, который автоматически сохраняет и извлекает информацию из моделей sails.

Я надеюсь, что это может вам помочь (хотя кажется, что вы используете определенные конечные точки контроллера).

Кстати: он работает с sails 0.10 (поскольку некоторые вещи, такие как названия тем, изменились с 0.9). Если вам нужно заставить его работать с 0.9, просто дайте мне знать, и я буду рад помочь.

Ответ №2:

Sails предоставляет конечные точки REST, которые использует ваше приложение Angular, в противном случае оно будет обслуживать приложение Angular и связанные с ним (возможно, статические) ресурсы. Приложение Angular может быть отправлено из Sails для любого 404, который выглядит как html-запрос (в моем случае это то, что происходит, но вам понадобится что-то более сложное, если SEO важно).

Приложение Angular обрабатывает маршрутизацию в приложении на клиенте, включая 404 / отсутствующие маршруты.

В основном вся маршрутизация, которую традиционный проект обрабатывал бы на стороне сервера, теперь обрабатывается в клиенте с помощью Angular, в то время как api передается в формате JSON от Sails к клиенту.

Вы можете писать тесты для своего api и приложения Angular отдельно (я использовал Frisbyjs Jasmine для api и Karma / Protractor Jasmine для приложения).

Ответ №3:

что я делаю, так это создаю сервисы, которые извлекают данные, а затем вводят их в контроллеры, sails по умолчанию предоставляет Rest api из ваших созданных моделей, поэтому, если у вас есть модель Employees в sails, подобная этой:

 module.exports = {
  schema:true,
   attributes: {
      firstName: {
       type: 'STRING',
      },
    }
  }
  

вы можете получить к нему доступ, перейдя по

   http://localhost:1337/Employees 
  

или использование angular ngResource в службе сотрудников

 angular.module('app')
.factory('EmployeesFactory',function($resource){
 return{
   getEmployees:function(searchedName){
      return $resource('http://localhost:1337/Employees',{name:'@id'})
          .query({name:searchedName}).$promise.then(function(response){
              return response;
          });
    },
  

и в вашем контроллере

 angular.module('app')
  .controller('EmployeesController',function($scoppe,EmployeesFactory){
        function init(){
         $scope.employees=EmployeesFactory.getEmployees();
       }
       init();
       // or to retrieve a specific employee by name
       $scope.findbyName=function(employeeName){
         $scope.employees=EmployeesFactory.getEmployees(employeeName);
     }

}
  

надеюсь, это поможет!

Комментарии:

1. Прежде всего, спасибо за вашу помощь и исходный код. Что я пытаюсь понять, так это то, есть ли способ обойти необходимость жесткой ссылки на $ resource на заводе. Все примеры, которые я видел, которые похожи на этот, все имеют жесткую ссылку. Кроме того, куда вы помещаете код для сервисов?