Tata letak aplikasi terstruktur yang kokoh untuk membangun API dan aplikasi web di Node.js.
Tujuan dari slay
adalah untuk memberikan konsistensi minimum absolut dalam aplikasi Node.js tanpa memaksakan banyak konvensi kepada pengguna. Sasaran konsistensi juga berpusat pada mendorong modularitas dalam kode tingkat aplikasi untuk penggunaan kembali secara maksimal. Hal ini dicapai melalui tiga fitur sederhana: tata letak aplikasi, "preboot", dan startup aplikasi yang konsisten.
Berdasarkan konvensi, slay
mencari modul yang ditentukan pengguna di lokasi berikut:
lib/preboots
lib/middlewares
lib/routes
Hal ini dilakukan dengan menggunakan pemuatan modul Node.js bawaan standar yang berarti bahwa masing-masing modul dapat berupa file individual dengan nama yang sama, bukan folder. Jangan ragu untuk memadupadankan seiring bertambahnya kompleksitas aplikasi Anda. misalnya:
lib/preboots/index.js
lib/middlewares.js
lib/routes/index.js
"Preboot adalah middleware untuk ekstensibilitas aplikasi"
Artinya, alih-alih function (req, res, next)
preboot adalah function (app, options, done)
. Dengan menerapkan tanda tangan fungsi yang konsisten untuk ekstensibilitas aplikasi, semua masalah pengurutan menjadi sepele. Misalnya:
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 ) ;
} ;
Meskipun hal ini mungkin tampak terlalu jelas, hal ini berdampak pada beberapa hal:
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' ) ` ) ;
} ) ;
Memanggil app.start
di atas akan memicu dua pencegat utama:
"setup"
./preboots
akan dimuat di app.before('setup')
routers
app.perform('routers')
dipicu di app.before('setup')
app.router
akan tersedia melalui app.after('routers')
atau melalui app.perform('setup')
"start"
lib/routes
akan dimuat di app.before('start')
lib/routes/index.js
harus memanggil app.perform('actions')
satu kali untuk memastikan semua rute dari app.router
dimuat di aplikasi.lib/middlewares
akan dimuat before('start')
Untuk informasi lebih lanjut lihat
App.Bootstrap
App
yang diekspos oleh slay
memiliki semua fungsi yang diekspos oleh app
yang dibuat oleh express bersama dengan:
Metode | Keterangan | Diwarisi dari |
---|---|---|
App.bootstrap | Aliran bootstrap slay inti | slay.App |
app.hookable | Mendefinisikan tindakan yang dapat dilakukan | slay.App |
app.stack | Mendefinisikan tumpukan middleware | slay.App |
app.config | Konfigurasi memuat melalui nconf | config pra-boot |
app.log | Logger ditentukan melalui winston | pra-boot logger |
app.routes | Router express tingkat atas | pra-boot routers |
app.preboot | Jadwalkan praboot | broadway |
app.mixin | Tambahkan fungsionalitas ke dalam aplikasi | broadway |
app.start | Mulai aplikasi | broadway |
app.close | Matikan aplikasi | broadway |
app.perform | Jalankan interseptor bernama | understudy |
app.before | Jalankan sebelum pencegat bernama | understudy |
app.after | Jalankan setelah pencegat bernama | understudy |
Nama | Keterangan | Dipanggil oleh |
---|---|---|
setup | Penyiapan bootstrap sebelum memulai | slay |
start | Startup aplikasi utama | slay |
routers | Definisi app.routes | slay |
actions | Fungsionalitas aplikasi jalur kritis | Pengguna |
Stack
adalah wadah ringan untuk sekumpulan middleware before
dan after
. Ini menjadi sangat berguna ketika Anda berpotensi memiliki banyak router dalam aplikasi Anda. Stack
dapat didefinisikan menggunakan app.stack
sebagai berikut:
middlewares.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.
} )
) ;
} ;
Semua instance Stack
yang dibuat dengan memanggil app.stack
akan diekspos pada objek app.stacks
.
app.start([options], callback);
dipanggil.app.perform('setup')
bekerja before
pencegat "setup" (lihat: pencegat pengganti). Ini mengeksekusi preboot slay
bawaan yang:app.config
(contoh dari nconf.Provider
).app.log
(contoh dari winston.Logger
).lib/preboots[.js]?
). Hal ini memungkinkan preboot sewenang-wenang yang ditentukan pengguna untuk ekstensibilitas secara sinkron atau asinkron.lib/middlewares[.js]?
).lib/routes[.js]?
).after
"pengaturan" akan dipanggil. (lihat: pencegat pengganti). slay
tidak menjalankan apa pun secara default di sini.app.perform('start')
bekerja before
pencegat "mulai" (lihat: pencegat pengganti). Ini mengeksekusi preboot slay
bawaan yang:app.perform('routers')
yang bekerja before
pencegat "router", menambahkan app.routes
, dan bekerja after
pencegat "router".lib/preboots[.js]?
). dijadwalkan pada (2) di atas.lib/middlewares[.js]?
) yang dijadwalkan pada (2) di atas.lib/routes[.js]?
) yang dijadwalkan pada (2) di atas.app.routes
.App.prototype._listen
dipanggil yang membuat server http
dan/atau https
apa pun.after
"mulai" akan dipanggil. (lihat: pencegat pengganti). slay
tidak menjalankan apa pun secara default di sini.callback
dari app.start([options], callback);
dipanggil. app
sekarang dimulai dan siap digunakan. npm test
MIT