Saya mencoba mencari cara untuk menutup instance Express. Pada dasarnya, saya ingin kebalikan dari .listen(port)
panggilan - bagaimana cara mendapatkan server Express untuk BERHENTI mendengarkan, melepaskan port, dan mematikan dengan bersih?
Saya tahu ini sepertinya pertanyaan yang aneh, jadi inilah konteksnya; mungkin ada cara lain untuk mendekati ini dan saya memikirkannya dengan cara yang salah. Saya mencoba menyiapkan kerangka pengujian untuk aplikasi socket.io/nodejs saya. Ini adalah aplikasi satu halaman, jadi dalam skrip pengujian saya (saya menggunakan Mocha, tetapi itu tidak terlalu penting) Saya ingin dapat memulai server, menjalankan pengujian terhadapnya, dan kemudian mematikan server. Saya bisa menyiasatinya dengan mengasumsikan bahwa server dihidupkan sebelum tes dimulai atau dengan salah satu tes memulai server dan setiap tes berikutnya menganggapnya sudah habis, tetapi itu benar-benar berantakan. Saya lebih suka jika setiap file pengujian memulai instance server dengan pengaturan yang sesuai dan kemudian menutup instance itu saat pengujian selesai. Itu berarti tidak ada ketergantungan yang aneh untuk menjalankan pengujian dan semuanya bersih. Ini juga berarti saya dapat melakukan pengujian startup / shutdown.
Jadi, ada saran tentang bagaimana melakukan ini? Saya telah memikirkan untuk memicu pengecualian secara manual untuk menurunkannya, tetapi itu tampaknya berantakan. Saya telah menggali dokumen dan sumber Express, tetapi sepertinya tidak dapat menemukan metode apa pun yang akan mematikan server. Mungkin juga ada sesuatu di socket.io untuk ini, tetapi karena server soket baru saja terpasang ke server Ekspres, saya pikir ini perlu terjadi di lapisan ekspres.
server.close()
jika memanggil ini dari dalam hook.Gunakan
app.close()
. Contoh lengkap:Panggil
app.close()
di dalam callback ketika tes telah berakhir. Namun perlu diingat bahwa prosesnya masih berjalan (meski sudah tidak mendengarkan lagi).Jika setelah ini, Anda harus mengakhiri prosesnya, lalu panggil
process.exit(0)
.Tautan:
app.close: http://nodejs.org/docs/latest/api/http.html#server.close (berlaku sama untuk)
process.exit: http://nodejs.org/docs/latest/api/process.html#process.exit
sumber
Saya telah menjawab variasi "cara menghentikan server HTTP" berkali-kali dengan cara yang berbeda node.jssaluran dukungan. Sayangnya, saya tidak dapat merekomendasikan salah satu pustaka yang ada karena mereka kurang dalam satu atau lain cara. Saya telah mengumpulkan paket yang (saya percaya) menangani semua kasus yang diharapkan dari penghentian server HTTP yang anggun.
https://github.com/gajus/http-terminator
Manfaat utama http-terminator adalah:
Penggunaan dengan Express.js:
sumber
sumber
Anda dapat dengan mudah melakukan ini dengan menulis skrip bash untuk memulai server, menjalankan pengujian, dan menghentikan server. Ini memiliki keuntungan karena memungkinkan Anda membuat alias ke skrip tersebut untuk menjalankan semua pengujian Anda dengan cepat dan mudah.
Saya menggunakan skrip tersebut untuk seluruh proses penerapan berkelanjutan saya. Anda harus melihat Alur Kerja Git Sederhana Mati Jon Rohan untuk beberapa wawasan tentang ini.
sumber