Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Node.js

Berkenalan dengan Generator & Koa.js: Bagian 2

by
Read Time:13 minsLanguages:
This post is part of a series called Introduction to Generators & Koa.js.
Introduction to Generators & Koa.js: Part 1

Indonesian (Bahasa Indonesia) translation by Dendi Deden (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Selamat datang di bagian kedua dari seri kami Generator dan Koa. Jika Anda melewatkannya, Anda dapat membaca baca Bagian 1 di sini. Sebelum memulai dengan proses pembangunan, membuat yakin bahwa Anda telah menginstal Node.js 0.11.9 atau lebih tinggi.

Dalam bagian ini, kita akan menciptakan sebuah kamus API menggunakan Koa.js, dan Anda akan belajar tentang routing, mengompresi, loggin, rate-limiting, penanganan error di Koa.js. Kami juga akan menggunakan Mongo sebagai datastore kami dan belajar secara singkat tentang mengimpor data ke dalam Mongo dan kemudahan yang datang dengan query di Koa. Akhirnya, kita akan melihat ke dalam debugging Koa apps.

Pemahaman Koa

KOA telah perubahan secara radikal yang dibangun memanfaatkan kebaikan generator ES6. Selain dari perubahan dalam aliran kontrol, Koa memperkenalkan objek kustom sendiri, seperti this, this.request, dan this.response, yang mudah bertindak sebagai lapisan pemanis sintaksis yang dibangun di atas Node req dan res objek, memberikan Anda akses ke berbagai kenyamanan metode getter/setter.

Selain kenyamanan, Koa juga membersihkan middleware yang, di Express, mengandalkan hacks jelek yang sering dimodifikasi core objek. Ini juga menyediakan penanganan stream yang lebih baik.

Tunggu, Apa itu Middleware?

Middleware adalah pluggable fungsi yang menambahkan atau menghapus bagian tertentu fungsionalitas dengan melakukan beberapa pekerjaan di objek request/response di Node.js.

KOA's Middleware

Koa middleware adalah pada dasarnya generator fungsi yang mengembalikan satu generator fungsi dan menerima lain. Biasanya, sebuah aplikasi memiliki serangkaian middleware yang dijalankan untuk setiap permintaan.

Juga, middleware harus mengalah kepada middleware 'downstream' berikutnya jika hal ini dijalankan oleh 'middleware upstream'. Kita akan membahas lebih lanjut tentang hal ini dalam Bagian penanganan kesalahan.

Membangun Middleware

Hanya satu hal: untuk menambah middleware Koa aplikasi Anda, kami menggunakan metode koa.use() dan menyediakan fungsi middleware sebagai argumen. Contoh: app.use(koa-logger) menambahkan koa-logger daftar middleware yang menggunakan aplikasi kami.

Membangun aplikasi

Untuk memulai dengan kamus API, kita perlu bekerja set definisi. Untuk menciptakan real-life skenario ini, kami memutuskan untuk pergi dengan dataset asli. Kami mengambil definisi dump dari Wikipedia dan mengisinya ke Mongo. Set terdiri dari kata-kata sekitar 700.000 seperti kami diimpor hanya dump Inggris. Setiap catatan (atau dokumen) terdiri dari sebuah kata, jenis dan maknanya. Anda dapat membaca lebih lanjut tentang proses impor di import.txt file dalam repositori.

Untuk bergerak sepanjang proses pembangunan, clone repositori dan memeriksa progress Anda dengan beralih ke commit yang berbeda. Untuk clone repo, gunakan perintah berikut:

Kita dapat memulai dengan membuat server basis Koa:

Di baris pertama, kita mengimpor Koa dan menyimpan instance dalam variabel app. Kemudian kita tambahkan middleware tunggal dalam baris 5, yang mana anonim generator fungsi yang mengambil variabel berikutnya sebagai parameter. Di sini, kami mengatur jenis dan status kode respon, yang juga secara otomatis ditentukan, tetapi kita juga dapat mengatur mereka secara manual. Kemudian akhirnya kami mengatur body respon.

Karena kita telah menetapkan body di middleware pertama kami, ini akan menandai berakhirnya setiap siklus permintaan dan tidak middleware lain akan terlibat. Terakhir, kita mulai server dengan memanggil metode listen dan memasukan nomor port sebagai parameter.

Kita dapat mulai server dengan menjalankan skrip melalui:

Anda langsung dapat mencapai tahap ini dengan bergerak untuk melakukan 6858ae0:

Menambahkan kemampuan Routing

Routing memungkinkan kita untuk mengarahkan permintaan berbeda untuk fungsi yang berbeda berdasarkan jenis permintaan dan URL. Sebagai contoh, kita mungkin ingin menanggapi /login berbeda daripada signup. Ini dapat dilakukan dengan menambahkan middleware, yang secara manual memeriksa URL permintaan diterima dan menjalankan fungsi-fungsi terkait. Atau, daripada secara manual menulis middleware, kita dapat menggunakan buatan komunitas middleware, juga dikenal sebagai middleware modul.

Untuk menambahkan kemampuan routing ke aplikasi kami, kami akan menggunakan modul komunitas yang bernama koa-router.

Untuk menggunakan koa-router, kami akan mengubah kode yang ada untuk kode yang ditunjukkan di bawah ini:

Di sini kita telah mengimport dua modul, mana router menyimpan koa-router dan mount menyimoan modul koa-mount, memungkinkan kita untuk menggunakan router dalam aplikasi Koa kami.

Baris 6, kami telah mendefinisikan fungsi handler kami, yang merupakan fungsi yang sama seperti sebelumnya tetapi di sini kita telah memberikannya nama. Pada baris 12, kami menyimpan instance dari router dalam APIv1, dan di baris 13 kita mendaftar handler untuk semua permintaan GET route /all

Jadi semua permintaan kecuali ketika mendapatkan permintaan dikirim ke localhost:3000/all akan mengembalikan "not found". Akhirnya pada baris 15, kami menggunakan mound middleware, yang memberikan fungsi generator dapat digunakan yang dapat diberikan kepada app.use().

Untuk langsung mencapai langkah ini atau membandingkan aplikasi Anda, jalankan perintah berikut di clone repo:

Sebelum kita menjalankan aplikasi kita, sekarang kita perlu menginstal koa-router dan koa-mount menggunakan npm. Kami mengamati bahwa sebagai kompleksitas kami aplikasi meningkat, jumlah modul dependensi juga meningkat.

Untuk melacak semua informasi mengenai proyek dan membuat data tersebut tersedia untuk npm, kami menyimpan semua informasi di package.json termasuk semua dependensi. Anda dapat membuat package.json secara manual atau menggunakan command line interaktif yang dibuka menggunakan perintah $ npm init.

File sangat minim package.json terlihat seperti di atas.

Setelah ada package.json, Anda dapat menyimpan ketergantungan menggunakan perintah berikut:

Misalnya: dalam kasus ini, kita akan menginstal modul-modul yang menggunakan perintah berikut untuk menyimpan dependensi di package.json.

Sekarang Anda dapat menjalankan aplikasi yang menggunakan $ node - --harmony index.js.

Anda dapat membaca lebih lanjut tentang package.json sini.

Menambahkan Route untuk Kamus API

Kita akan mulai dengan menciptakan dua rute untuk API, satu untuk mendapatkan hasil yang tunggal dalam query lebih cepat, dan yang kedua untuk mendapatkan semua pencocokan kata (yang lebih lambat untuk pertama kalinya).

Untuk menjaga hal-hal dikelola, kami akan menjaga semua fungsi API dalam folder terpisah disebut api dan file bernama api.js, dan impor kemudian dalam file index.js utama kami.

Di sini kami menggunakan co-monk, yang bertindak membungkus sekitar monk, sehingga sangat mudah bagi kita untuk query MongoDB menggunakan generator di Koa. Di sini, kita mengimpor monk dan co-monk, dan terhubung ke instance MongoDB di baris 3. Kita memanggil wrap() pada collection, untuk membuat mereka generator-friendly.

Kemudian kita menambahkan dua metode generator yang bernama all dan single sebagai properti variabel exports sehingga mereka dapat diimpor dalam file lainnya. Dalam setiap fungsi, pertama kami memeriksa parameter kueri 'word' Jika ada, kami query untuk hasil atau lain kita membalas dengan kesalahan 404.

Kami menggunakan kata kunci yield untuk menunggu hasil seperti yang dibahas dalam artikel pertama, yang berhenti eksekusi sampai hasil diterima. Pada baris 12, kami menggunakan metode find, yang mengembalikan semua pencocokan kata-kata, yang disimpan dalam res dan kemudian dikirim kembali. baris 23, kami menggunakan metode findOne tersedia di collection, yang mengembalikan hasil pencocokan pertama.

Menetapkan Handler ini ke Route

Di sini kita mengimpor metode yang diekspor dari api.js dan kami menetapkan handler GET route /all /single dan kami memiliki API sepenuhnya fungsional dan aplikasi siap.

Untuk menjalankan aplikasi, Anda hanya perlu menginstal modul monk dan co-monk menggunakan perintah di bawah ini. Juga, pastikan Anda memiliki sebuah instance yang berjalan dari MongoDB di mana Anda telah mengimpor collection yang ada dalam repositori git menggunakan petunjuk yang disebutkan dalam import.txtweird.

Sekarang Anda dapat menjalankan aplikasi dengan menggunakan perintah berikut:

Anda dapat membuka peramban dan buka URL berikut untuk memeriksa fungsi aplikasi. Hanya mengganti 'new' dengan kata yang Anda inginkan untuk query.

  • http://localhost:3000/v1/semua?word=new
  • http://localhost:3000/v1/single?word=new

Untuk langsung mencapai langkah ini atau membandingkan aplikasi Anda, jalankan perintah berikut di clone repo:

penanganan Kesalahan di Koa

Dengan menggunakan cascading middlewares, kita bisa menangkap kesalahan menggunakan mekanisme try/catch, sebagai middleware masing-masing dapat merespon sambil yielding downstream dan upstream. Jadi, jika kita menambahkan middleware try dan catch di awal aplikasi, itu akan menangkap semua kesalahan yang ditemui oleh permintaan di seluruh middleware karena akan menjadi yang terakhir middleware selama upstreaming. Menambahkan kode berikut pada baris 10 atau sebelum di index.js harus bekerja.

Menambahkan Logging dan Rate-Limiting untuk aplikasi

Menyimpan log adalah bagian penting dari aplikasi zaman modern, seperti log sangat membantu dalam debugging dan menemukan masalah dalam aplikasi. Mereka juga menyimpan semua kegiatan dan dengan demikian dapat digunakan untuk mengetahui pengguna aktivitas pola dan pola-pola lainnya yang menarik.

Rate-limiting juga menjadi bagian penting dari aplikasi moden, dimana hal ini penting untuk menghentikan spammer dan bot dari membuang-buang sumber daya berharga server Anda dan menghentikan mereka dari scraping API anda.

Hal ini cukup mudah untuk menambahkan rate-limiting dan logging untuk aplikasi Koa kami. Kita akan menggunakan dua komunitas modul: koa-logger dan koa-better-rate-limitting. Kita perlu menambahkan kode berikut ke aplikasi kami:

Di sini kita telah mengimport dua modul dan menambahkan mereka sebagai middleware. Logger akan log setiap permintaan dan mencetak dalam stdout proses yang dapat dengan mudah disimpan dalam file. Dan batas middleware batas jumlah permintaan pengguna tertentu dapat meminta dalam jangka waktu tertentu (di sini itu adalah maksimal sepuluh permintaan dalam tiga menit). Juga Anda dapat menambahkan alamat IP yang akan di blacklist yang dan permintaan mereka tidak akan diproses.

Jangan lupa untuk menginstal modul sebelum menggunakan kode menggunakan:

Mengompresi lalu lintas

Salah satu cara untuk memastikan pengiriman lebih cepat adalah untuk gzip response Anda, yang cukup sederhana di Koa. Untuk kompres lalu-lintas Anda di Koa, Anda dapat menggunakan modul koa-kompres.

Di sini, pilihan dapat kosong objek atau dapat diatur sesuai kebutuhan.

Anda bahkan dapat mematikan kompresi dalam permintaan dengan menambahkan kode berikut ke middleware:

Jangan lupa untuk menginstal compress menggunakan npm.

Untuk langsung mencapai langkah ini atau membandingkan aplikasi Anda, jalankan perintah berikut di clone repo:

Menulis tes

Tes harus menjadi bagian penting dari semua kode, dan satu harus menargetkan untuk cakupan uji maksimum. Dalam artikel ini, kita akan menulis tes untuk rute yang dapat diakses dari aplikasi kami. Kita akan menggunakan supertest dan Mocha untuk membuat pengujian kami.

Kami akan menyimpan pengujian kami di test.js di api folder. Dalam tes keduanya, kami pertama menjelaskan pengujian kami, memberi nama dibaca lebih manusiawi. Setelah itu, kita akan memasukan berupa fungsi anonim yang menggambarkan perilaku tes yang benar, dan mengambil cllback yang berisi pengujian yang sebenarnya. Di setiap tes, kita impor aplikasi kami, memulai server, menggambarkan jenis permintaan, URL dan permintaan, dan kemudian menetapkan encoding ke gzip. Akhirnya kami memeriksa untuk respon jika itu benar.

Untuk menjalankan pengujian kami, kami akan membuat sebuah Makefile:

Di sini, kita telah dikonfigurasi reporter (nyan cat) dan test framework (mocha). Perhatikan bahwa impor harus menambahkan --harmoni untuk mengaktifkan ES6 mode. Akhirnya, kami juga menentukan lokasi dari semua tes. Makefile dapat dikonfigurasi untuk pengujian yang tak berujung aplikasi Anda.

Sekarang untuk menguji aplikasi Anda, hanya menggunakan perintah berikut di direktori utama dari aplikasi.

Hanya ingat untuk menginstal modul pengujian (mocha, should, supertest) sebelum pengujian, menggunakan perintah di bawah ini:

Berjalan di produksi

Untuk menjalankan aplikasi kami dalam produksi, kita akan menggunakan PM2, yang berguna Node proses monitor. Kami harus menonaktifkan app logger sementara di produksi; dapat otomatis menggunakan variabel environment.

Untuk menginstal 2, masukkan perintah berikut dalam terminal

Dan aplikasi kami dapat diluncurkan dengan menggunakan perintah berikut:

Sekarang, bahkan jika aplikasi kita crash, itu akan memulai secara otomatis dan Anda dapat tidur nyenyak.

Kesimpulan

KOA adalah cahaya dan ekspresif middleware untuk Node.js yang membuat proses menulis aplikasi web dan api lebih menyenangkan.

Hal ini memungkinkan Anda untuk memanfaatkan banyak komunitas modul untuk memperluas fungsionalitas dari aplikasi Anda dan menyederhanakan semua tugas biasa, membuat pengembangan web menjadi aktivitas yang menyenangkan.

Jangan ragu untuk meninggalkan komentar, pertanyaan, atau informasi lain di input bawah.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.