Поиск…


замечания

Как работает Blueprint API?

Когда паруса вначале начинают использовать sails lift , паруса видят, есть ли у вас какой-либо контроллер. В нашем примере у нас есть один контроллер, Пользовательский контроллер. Затем Sails предоставляет доступ к проектам чертежа для этого пользовательского контроллера, как если бы мы сами строили их в контроллере. Паруса также автоматически создают маршруты маршрутизации во время подъема сервера. Поэтому, даже если в /config/routes.js не определены /config/routes.js и никакие действия не определены в /api/controllers/UserController.js явно, после подъема сервера все эти маршруты и действия доступны для использования.

Маршруты Blueprint

Когда вы запускаете sails lift с включенными чертежами, структура проверяет ваши контроллеры, модели и конфигурацию, чтобы автоматически связывать определенные маршруты. Эти неявные маршруты маршрута позволяют вашему приложению отвечать на определенные запросы без необходимости связывать эти маршруты вручную в файле config/routes.js . По умолчанию маршруты маршрутизации указывают на соответствующие им действия , любые из которых могут быть переопределены с помощью специального кода.

В Sails есть три типа маршрутов:

  • RESTful , где путь всегда /:model/:id? , Когда User модель и контроллер определены, схема привязывает маршруты RESTful неявно следующим образом -
    'GET /user/:id?': {
      controller: 'User',
      action: 'find'
    },
    'POST /user': {
      controller: 'User',
      action: 'create'
    },
    'PUT /user/:id?': {
      controller: 'User',
      action: 'update'
    },
    'DELETE /user/:id?': {
      controller: 'User',
      action: 'destroy'
    }
    
    Эти маршруты используют HTTP-глагол для определения действия, которое необходимо предпринять, даже если маршрут такой же. Таким образом, запрос POST для /user создаст нового пользователя, запрос PUT /user/123 будет обновлять пользователя с помощью первичного ключа 123, а запрос DELETE to /user/123 удалит пользователя, чей первичный ключ - 123. В среда производства, маршруты RESTful, как правило, должны быть защищены политиками, чтобы избежать несанкционированного доступа.
  • Маршруты ярлыка , где действие, которое нужно предпринять, закодировано в пути. Для нашей модели пользователя и контроллера Sails неявно связывает следующие четыре маршрута ярлыка.

    'GET /user/find/:id?': {
      controller: 'User',
      action: 'find'
    },
    'GET /user/create/:id?': {
      controller: 'User',
      action: 'create'
    },
    'GET /user/update/:id?': {
      controller: 'User',
      action: 'update'
    },
    'GET /user/destroy/:id?': {
      controller: 'User',
      action: 'destroy'
    }
    

    Например, /user/create?name=joe shortcut создает нового пользователя, а /user/update/1?name=mike обновляет поле имени пользователя # 1. Обратите внимание, что эти маршруты отвечают только на запросы GET . Маршруты ярлыков очень удобны для разработки, но обычно они должны быть отключены в рабочей среде. Он не предназначен для использования в производстве.

  • Маршруты действий , которые автоматически создают маршруты для пользовательских действий контроллера. Например, пусть query является настраиваемым действием, определенным в User controller. Тогда следующие маршруты будут неявно доступны для парусов -

    'GET /user/query/:id?': {
      controller: 'User',
      action: 'query'
    },
    'POST /user/query/:id?': {
      controller: 'User',
      action: 'query'
    },
    'PUT /user/query/:id?': {
      controller: 'User',
      action: 'query'
    },
    'DELETE /user/query/:id?': {
      controller: 'User',
      action: 'query'
    }
    

    Если запрос сделан в /user/query/:id? маршрут, затем независимый от HTTP-глагола, действие будет таким же. В отличие от маршрутов RESTful и ярлыков, маршруты действий не требуют, чтобы у контроллера был соответствующий файл модели. Это означает, что если вы определяете контроллер в файле /api/controllers/FooController.js но не моделируете в файле /api/models/Foo.js , не будет RESTful или ярлыка маршрута с /foo но все равно будут маршруты действий доступный для использования.

Порядок согласования маршрутов

Когда приходит запрос, паруса сначала будут сопоставлять маршрут с явно определенными маршрутами. Если он совпадает, то дальнейшее согласование не выполняется и выполняется соответствующее действие. Но если это не соответствует, то маршрут сначала сопоставляется с маршрутами действий проекта, если он не совпадает с маршрутами отдыха, и если он не соответствует ни маршрутам быстрого доступа. Поэтому, если ваш файл /config/routes.js имеет некоторую запись, например следующую:

  '/user/query/:id?': {
    controller: 'User',
    action: 'find'
  }

Тогда вы не можете ожидать, что маршруты действий query будут работать. Поскольку тот же маршрут , как query маршрут действий будет соответствовать против явного определения маршрутов и find действие контроллера пользователя будет выполняться.

Действия Blueprint

Действия Blueprint (не путать с маршрутами действий проекта) - это общие действия, предназначенные для работы с любым из ваших контроллеров, имеющих модель с тем же именем (например, ParrotController понадобится модель Parrot ). Подумайте о них как о поведении по умолчанию для вашего приложения. Например, если у вас есть модель User.js и пустой контроллер UserController.js , вы можете find , create , update , destroy , populate , add и remove действия, не требуя их написать.

По умолчанию маршруты маршрута RESTful и маршруты ярлыков привязаны к их соответствующим проектам. Однако любое действие чертежа может быть переопределено для конкретного контроллера путем создания пользовательского действия в этом файле контроллера (например, ParrotController.find ). Кроме того, вы можете переопределить действие чертежа повсюду в своем приложении , создав собственное пользовательское действие.

Sails поставляется со следующими проектами:

  • находить
  • findOne
  • Создайте
  • Обновить
  • уничтожить
  • населять
  • добавлять
  • Удалить

Отключение маршрутов Blueprint

  • Глобальная основа : Конфигурация API Blueprint определена в файле /config/blueprint.js . Вы можете включать или отключать все три типа маршрутов для всех контроллеров. Например, если вы хотите отключить маршруты ярлыков для всех ваших контроллеров, но хотите, чтобы оба маршрута действия и отдыха были включены, ваш /config/blueprint.js должен быть таким:

    module.exports.blueprints = {
      action: true,
      rest: true,
      shortcut: false
    }
    
  • На основе каждого контроллера : вы также можете переопределить любые настройки из /config/blueprints.js на основе каждого контроллера, указав ключ «_config» в своем определении контроллера и назначив ему объект конфигурации с переопределениями для настроек в этом файле. В качестве примера, если вы хотите, чтобы маршруты быстрого доступа были включены только для вашего пользовательского контроллера, но не для каких-либо контроллеров, то с приведенной выше конфигурацией плана вы должны иметь следующую пару значений ключа в пользовательском контроллере.

    module.exports = {
      _config: {
        actions: true,
        shortcuts: true,
        rest: true
      }
    }
    
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow