수색…


비고

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 경로를 암시 적으로 다음과 같은 방식으로 바인딩합니다.
    '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 하는 요청 /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 , addremove 작업은 암시 적으로 작성하지 않아도됩니다.

기본적으로 청사진 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
      }
    }
    
    


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow