Apakah ada ketentuan umum untuk memecah dan memodularisasi app.js
file dalam aplikasi Express.js ? Atau apakah biasa menyimpan semuanya dalam satu file?
javascript
node.js
modularity
express
Eric si Merah
sumber
sumber
Jawaban:
Saya telah memecah milik saya sebagai berikut:
Saya menggunakan Ekspor untuk mengembalikan apa yang relevan. Misalnya, dalam model yang saya lakukan:
dan kemudian jika saya perlu membuat nomor telepon, sesederhana itu:
jika saya perlu menggunakan skema, maka
PhoneNumber.schema
(yang mengasumsikan bahwa kita bekerja dari folder routes dan perlu naik 1 level ke atas lalu turun ke model)
EDIT 4
The ekspres wiki memiliki daftar kerangka yang dibangun di atasnya.
Dari semua itu, menurut saya matador Twitter terstruktur dengan cukup baik. Kami sebenarnya menggunakan pendekatan yang sangat mirip dengan cara mereka memuat bagian aplikasi.
derby.js juga terlihat sangat menarik. Ini mirip dengan meteor tanpa semua hype dan benar-benar memberikan kredit di mana kredit jatuh tempo (terutama, simpul dan ekspres).
EDIT 3
Jika Anda adalah penggemar CoffeeScript (Saya bukan) dan sangat menginginkan L&F Rails, ada juga Tower.js .
EDIT 2
Jika Anda sudah familiar dengan Rails dan tidak keberatan dengan beberapa konsep yang beredar, ada Lokomotif . Ini adalah kerangka ringan yang dibangun di Express. Ini memiliki struktur yang sangat mirip dengan RoR dan membawa beberapa konsep yang lebih mendasar (seperti perutean).
Layak untuk dicoba bahkan jika Anda tidak berencana untuk menggunakannya.
EDIT 1
nodejs-express-mongoose-demo sangat mirip dengan struktur saya. Saksikan berikut ini.
sumber
Peringatan: kode referensi yang saya retas bersama untuk node knockout, ini berfungsi tetapi jauh dari elegan atau dipoles.
Untuk lebih spesifik tentang pemisahan
app.js
saya memiliki file app.js berikutIni pada dasarnya berarti saya menempatkan semua bootstrap saya dalam file terpisah, lalu saya bootstrap server.
Jadi apa yang dilakukan bootstrap ?
Yah itu membagi semua pengaturan inisialisasi server dalam potongan yang bagus. Secara khusus
app.configure
)Sebagai contoh mari kita lihat file routing
Di sini saya memuat semua model dan rute saya sebagai array file.
Penafian:
readdirSync
tidak apa-apa jika dipanggil sebelum Anda memulai server http (sebelum.listen
). Memanggil panggilan pemblokiran sinkron pada waktu mulai server hanya membuat kode lebih mudah dibaca (pada dasarnya ini adalah retasan)Di sini saya menekan socket.io untuk benar-benar menggunakan otorisasi daripada membiarkan tom dan jack apa pun untuk berbicara ke server socket.io saya
Di sini saya memulai rute saya dengan meneruskan model yang relevan ke setiap objek rute yang dikembalikan dari file rute.
Pada dasarnya jist adalah Anda mengatur semuanya menjadi modul kecil yang bagus dan kemudian memiliki beberapa mekanisme bootstrap.
Proyek saya yang lain (blog saya) memiliki file init dengan struktur serupa .
Penafian: blog rusak dan tidak bisa dibangun, saya sedang mengerjakannya.
sumber
Untuk organisasi routing yang dipelihara Anda dapat memeriksa artikel ini tentang para express-routescan modul simpul dan mencobanya. Ini adalah solusi terbaik untuk saya.
sumber
Saya memiliki aplikasi saya yang dibangun di atas alat generator ekspres. Anda dapat menginstalnya dengan menjalankan
npm install express-generator -g
dan menjalankannya menggunakanexpress <APP_NAME>
.Untuk memberi Anda perspektif, salah satu struktur aplikasi saya yang lebih kecil terlihat seperti ini:
Satu hal keren yang saya suka tentang struktur ini yang akhirnya saya adopsi untuk aplikasi ekspres apa pun yang saya kembangkan adalah cara rute diatur. Saya tidak suka harus mewajibkan setiap file rute ke app.js dan
app.use()
setiap rute, terutama karena file semakin besar. Karena itu, saya merasaapp.use()
terbantu untuk mengelompokkan dan memusatkan semua milik saya di file ./routes/index.js.Pada akhirnya, app.js saya akan terlihat seperti ini:
dan ./routes/index.js saya akan terlihat seperti ini:
Saya dapat melakukannya hanya
require(./users)
karena saya menulis rute pengguna menggunakan express.Router () yang memungkinkan saya untuk "mengelompokkan" beberapa rute dan kemudian mengekspornya sekaligus, dengan tujuan membuat aplikasi lebih modular.Ini adalah contoh apa yang Anda ingin lakukan pada rute ./routers/users.js saya:
Semoga ini membantu menjawab pertanyaan Anda! Semoga berhasil!
sumber