Надежный структурированный макет приложения для создания API и веб-приложений на Node.js.
Цель 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.perform('routers')
запускается в app.before('setup')
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
App
, предоставленное slay
имеет все функции, предоставляемые app
, созданным Express, а также:
Метод | Описание | Унаследовано от |
---|---|---|
App.bootstrap | Процесс начальной загрузки Core 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.
} )
) ;
} ;
Все экземпляры Stack
, созданные путем вызова app.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
, которые:app.perform('routers')
который выполняется before
перехватчиками "маршрутизаторы", добавляет app.routes
и выполняется after
перехватчиков "маршрутизаторы".lib/preboots[.js]?
). запланировано в пункте (2) выше.lib/middlewares[.js]?
), запланированное в (2) выше.lib/routes[.js]?
), запланированные в пункте (2) выше.app.routes
.App.prototype._listen
, который создает любые серверы http
и/или https
.after
«start» . (см.: дублёры-перехватчики). slay
здесь по умолчанию ничего не запускает.callback
из app.start([options], callback);
вызывается. Теперь app
запущено и готово к использованию. npm test
Массачусетский технологический институт