Node.js에서 API 및 웹 앱을 구축하기 위한 견고하고 구조화된 애플리케이션 레이아웃입니다.
slay
의 목표는 사용자에게 엄청난 양의 규칙을 강요하지 않고 Node.js 애플리케이션에서 최소한의 일관성을 제공하는 것입니다. 또한 일관성 목표는 재사용을 극대화하기 위해 애플리케이션 수준 코드의 모듈화를 장려하는 데 중점을 둡니다. 이는 애플리케이션 레이아웃, "사전 부팅" 및 일관된 애플리케이션 시작이라는 세 가지 간단한 기능을 통해 수행됩니다.
관례에 따라 slay
다음 위치에서 사용자 정의 모듈을 찾습니다:
lib/preboots
lib/middlewares
lib/routes
이는 표준 내장 Node.js 모듈 로딩을 사용하여 수행됩니다. 즉, 이들 각각은 폴더 대신 동일한 이름의 개별 파일이 될 수 있습니다. 애플리케이션의 복잡성이 증가함에 따라 자유롭게 혼합하고 일치시키십시오. 예:
lib/preboots/index.js
lib/middlewares.js
lib/routes/index.js
"프리부트는 애플리케이션 확장성을 위한 미들웨어입니다."
즉, 사전 부팅은 function (req, res, next)
대신 function (app, options, done)
입니다. 애플리케이션 확장성에 일관된 기능 시그니처를 적용하면 모든 요구 사항에 대한 주문 문제가 간단해집니다. 예를 들어:
lib/preboots/index.js
module . exports = function ( app , options , done ) {
//
// **SCHEDULE** the attachment and initialization of
// connections to our models.
//
app . preboot ( require ( './models' ) ) ;
done ( ) ;
} ;
lib/preboots/models.js
module . exports = function ( app , options , next ) {
//
// Attach all of the models for our API / microservices
// to the app itself and connect to them
// (e.g. initialize TCP sockets, etc).
//
app . models = require ( '../models' ) ;
app . models . connect ( next ) ;
} ;
너무 뻔해 보일 수도 있지만 다음과 같은 여러 가지 작업을 수행합니다.
lib/preboots/index.js
에서 정렬되도록 합니다. const slay = require ( 'slay' ) ;
const app = new slay . App ( __dirname ) ;
app . start ( options , function ( err ) {
if ( err ) { throw err ; }
app . log . info ( `Listening on ${ app . config . get ( 'http' ) ` ) ;
} ) ;
위에서 app.start
호출하면 두 가지 주요 인터셉터가 트리거됩니다.
"setup"
인터셉터./preboots
app.before('setup')
에 로드됩니다.routers
app.before('setup')
에서 app.perform('routers')
이 트리거되었습니다.app.router
app.after('routers')
또는 app.perform('setup')
을 통해 사용할 수 있습니다."start"
인터셉터lib/routes
app.before('start')
에 로드됩니다.lib/routes/index.js
app.perform('actions')
한 번 호출하여 app.router
의 모든 경로가 앱에 로드되었는지 확인해야 합니다.lib/middlewares
before('start')
에 로드됩니다.자세한 내용은
App.Bootstrap
을 참조하세요.
slay
에 의해 노출된 App
다음과 함께 Express에서 생성된 app
에 의해 노출된 모든 기능이 포함되어 있습니다.
방법 | 설명 | 상속됨 |
---|---|---|
App.bootstrap | 코어 slay 부트스트랩 흐름 | slay.App |
app.hookable | 후크 가능한 작업을 정의합니다. | slay.App |
app.stack | 미들웨어 스택을 정의합니다. | slay.App |
app.config | nconf 통한 구성 로딩 | 사전 부팅 config |
app.log | winston 통해 정의된 로거 | logger 사전 부팅 |
app.routes | 최상위 express 라우터 | routers 사전 부팅 |
app.preboot | 사전 부팅 예약 | broadway |
app.mixin | 앱에 기능 추가 | broadway |
app.start | 애플리케이션 시작 | broadway |
app.close | 애플리케이션 종료 | broadway |
app.perform | 명명된 인터셉터 실행 | understudy |
app.before | 명명된 인터셉터 이전에 실행 | understudy |
app.after | 명명된 인터셉터 이후에 실행 | understudy |
이름 | 설명 | 호출자 |
---|---|---|
setup | 사전 시작 부트스트랩 설정 | slay |
start | 주요 애플리케이션 시작 | slay |
routers | app.routes 의 정의 | slay |
actions | 중요 경로 적용 기능 | 사용자 |
Stack
미들웨어 before
및 after
세트를 위한 경량 컨테이너입니다. 이는 애플리케이션에 잠재적으로 여러 라우터가 있을 때 매우 유용합니다. Stack
다음과 같이 app.stack
사용하여 정의할 수 있습니다.
미들웨어.js
module . exports = function ( app , options , next ) {
//
// An authorization middleware for different roles
// returns an HTTP middleware function when invoked.
//
var authorize = require ( './authorize' ) ;
//
// Stack middlewares can be declared and used inline
//
app . use (
app . stack ( {
name : 'admin-only' ,
before : [ authorize ( 'admin' ) ]
} ) . middleware ( function ( req , res , next ) {
// Dispatch (req, res) to a router.
} )
) ;
//
// Or extended from a previous declaration and used inline
//
app . use (
app . stacks [ 'designer-only' ]
. before ( authorize ( 'designer' ) )
. middleware ( function ( req , res , next ) {
// Dispatch (req, res) to a router.
} )
) ;
} ;
app.stack
호출하여 생성된 모든 Stack
인스턴스는 app.stacks
개체에 노출됩니다.
app.start([options], callback);
호출됩니다.app.perform('setup')
"설정" 인터셉터(참조: 언더스터디 인터셉터) before
수행됩니다. 그러면 다음과 같은 내장된 slay
사전 부팅이 실행됩니다.app.config
( nconf.Provider
인스턴스) 를 생성합니다 .app.log
( winston.Logger
의 인스턴스) 를 생성합니다 .lib/preboots[.js]?
에서). 이를 통해 동기화 또는 비동기 방식의 확장성을 위해 임의의 사용자 정의 사전 부팅이 가능합니다.lib/middlewares[.js]?
에서).lib/routes[.js]?
에서).after
모든 것입니다. (참조: 학부생 인터셉터). slay
기본적으로 여기서는 아무것도 실행하지 않습니다.app.perform('start')
인터셉터를 "시작"하기 before
수행됩니다(인터스터디 연구 참조). 그러면 다음과 같은 내장된 slay
사전 부팅이 실행됩니다.before
수행되고 app.routes
추가하며 "라우터" 인터셉터 after
수행되는 app.perform('routers')
호출합니다 .lib/preboots[.js]?
에서). 위의 (2)에서 예정되어 있습니다.lib/middlewares[.js]?
)를 호출합니다 .lib/routes[.js]?
에서)를 호출합니다 .app.routes
에 최종 404 핸들러를 추가합니다 .http
및/또는 https
서버를 생성하는 App.prototype._listen
호출됩니다.after
모든 것. (참조: 학부생 인터셉터). slay
기본적으로 여기서는 아무것도 실행하지 않습니다.app.start([options], callback);
의 callback
; 호출됩니다. 이제 app
시작되었으며 사용할 준비가 되었습니다. npm test
MIT