sails.js
Blueprint API
수색…
비고
Blueprint API는 어떻게 작동합니까?
돛이 처음으로 sails lift
사용하기 시작할 때 돛은 컨트롤러가 정의되어 있는지 확인합니다. 이 예에서는 하나의 컨트롤러 인 User 컨트롤러가 있습니다. Sails는이 사용자 컨트롤러에 대한 청사진 작업에 대한 액세스를 컨트롤러에서 직접 구현 한 것처럼 제공합니다. Sails는 또한 서버를 들어 올릴 때 청사진 루트를 자동으로 생성합니다. 따라서 /config/routes.js
라우트가 정의되어 있지 않고 /api/controllers/UserController.js
명시 적으로 조치가 정의되지 않은 경우에도 서버를 해제 한 후에 이러한 모든 라우트와 조치를 사용할 수 있습니다.
청사진 루트
청사진이 활성화 된 상태에서 sails lift
를 실행하면 프레임 워크가 컨트롤러, 모델 및 구성을 검사하여 특정 경로를 자동으로 바인딩합니다. 이러한 암시 적 청사진 경로를 사용하면 config/routes.js
파일에서 해당 경로를 수동으로 바인딩하지 않아도 앱이 특정 요청에 응답 할 수 있습니다. 기본적으로 청사진 루트는 해당 청사진 액션을 가리키며, 그 중 어떤 것도 사용자 정의 코드로 덮어 쓸 수 있습니다.
Sails에는 세 가지 유형의 청사진 경로가 있습니다.
- RESTful 경로 , 경로는 항상
/:model/:id?
.User
모델과 컨트롤러가 정의되면 청사진은 RESTful 경로를 암시 적으로 다음과 같은 방식으로 바인딩합니다.
이 라우트는 HTTP 동사를 사용하여 라우트가 같더라도 수행 할 조치를 결정합니다. 그래서하는'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' }
POST
요청합니다/user
하는 새 사용자를 만듭니다PUT
수 요청/user/123
기본 키 (123)와 사용자와 업데이트됩니다DELETE
하는 요청/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
단축키는 새 사용자를 만들고/user/update/1?name=mike
는 사용자 # 1의 이름 필드를 업데이트합니다. 이러한 경로는GET
요청에만 응답합니다. 바로 가기 경로는 개발에 매우 편리하지만 일반적으로 프로덕션 환경에서는 사용하지 않아야합니다. 프로덕션 환경에서 사용하도록 설계되지 않았습니다.액션 경로 : 맞춤 컨트롤러 동작을위한 경로를 자동으로 만듭니다. 예를 들어,
query
를 사용자 컨트롤러에 정의 된 사용자 지정 작업으로 지정할 수 있습니다. 다음 항로는 돛에 암묵적으로 이용 가능할 것입니다 -'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?
에서 이루어진다면/user/query/:id?
라우트에서 HTTP 동사와 독립적으로 동작은 동일합니다. RESTful 및 바로 가기 경로와 달리 작업 경로에는 컨트롤러에 해당 모델 파일이 필요하지 않습니다 . 당신이 컨트롤러 정의하면 의미/api/controllers/FooController.js
파일 만에서 어떤 모델/api/models/Foo.js
파일을 아무 편안하고 또는 바로 가기 경로가 없을 것이다/foo
하지만, 여전히 행동 경로가있을 것입니다 사용할 수 있습니다.
일치하는 경로 순서
요청이 오면, 돛은 우선 경로를 명시 적으로 정의 된 경로와 대조합니다. 일치하는 경우 더 이상 일치가 수행되지 않고 해당 조치가 실행됩니다. 그러나 일치하지 않는 경우 경로가 먼저 청사진 작업 경로와 일치하고 나머지 경로와 일치하지 않으면 바로 가기 경로와 일치하지 않습니다. 따라서 /config/routes.js
파일에 다음과 같은 항목이있는 경우 -
'/user/query/:id?': {
controller: 'User',
action: 'find'
}
그러면 query
동작 경로가 작동 할 것으로 기대할 수 없습니다. query
동작 경로와 동일한 경로가 명시 적으로 라우트를 정의하고 사용자 컨트롤러의 동작을 find
것이 실행되기 때문에 실행됩니다.
청사진 액션
Blueprint 작업 (청사진 작업 경로 와 혼동하지 말 것)은 동일한 이름의 모델을 가진 컨트롤러와 함께 작동하도록 설계된 일반적인 작업입니다 (예 : ParrotController
에는 Parrot
모델이 필요함). 응용 프로그램의 기본 동작으로 간주하십시오. 예를 들어, User.js
모델과 비어있는 UserController.js
컨트롤러가 find
, create
, update
, destroy
, populate
, add
및 remove
작업은 암시 적으로 작성하지 않아도됩니다.
기본적으로 청사진 RESTful 경로와 바로 가기 경로는 해당 청사진 작업에 바인딩됩니다. 그러나 청사진 작업은 해당 컨트롤러 파일 (예 : ParrotController.find
)에서 사용자 지정 작업을 만들어 특정 컨트롤러에 대해 재정의 할 수 있습니다. 또는 사용자 지정 청사진 작업을 만들어 앱의 모든 부분에서 청사진 작업을 무시할 수 있습니다.
돛에는 다음과 같은 청사진 작업이 함께 제공됩니다.
- 발견
- findOne
- 몹시 떠들어 대다
- 최신 정보
- 멸하다
- 채우다
- 더하다
- 풀다
청사진 경로 비활성화
전체적인 기준 : Blueprint API 구성은
/config/blueprint.js
파일에 정의되어 있습니다. 거기에서 모든 컨트롤러의 세 가지 유형의 청사진 경로를 모두 활성화 또는 비활성화 할 수 있습니다. 예를 들어, 모든 컨트롤러에 대한 청사진 바로 가기 경로를 비활성화하고 싶지만 작업 및 나머지 경로를 모두 사용하려면/config/blueprint.js
가 다음과 같아야합니다.module.exports.blueprints = { action: true, rest: true, shortcut: false }
컨트롤러별로 : 컨트롤러 정의에 '_config'키를 정의하고 설정에 대한 재정의가있는 구성 객체를 할당하여 컨트롤러별로
/config/blueprints.js
의 설정을 무시할 수 있습니다 이 파일에 예를 들어 사용자 컨트롤러에만 단축키 경로를 사용하고 다른 컨트롤러에는 단축키 경로를 사용하지 않으려면 위의 청사진 구성에서 사용자 컨트롤러에 다음 키 값 쌍이 있어야합니다.module.exports = { _config: { actions: true, shortcuts: true, rest: true } }