Cara meningkatkan layanan API Anda di node.js. Bagian 1

Sejumlah materi yang layak sekarang tersedia untuk menulis API di node.js. Kebanyakan dari mereka dalam bentuk tutorial dan demo dalam dokumentasi. Ini cukup dengan cepat mencari tahu dan menulis sesuatu sendiri. Tetapi mereka jarang menemukan perincian mengapa ini dilakukan seperti itu. Dan beberapa poin dihilangkan sama sekali untuk kesederhanaan dan singkatnya.

Artikel ini dimaksudkan untuk mengisi beberapa kesenjangan yang mungkin timbul, dan pada akhirnya meningkatkan layanan Anda pada node.js.

PS Dalam kasus saya tidak menganggap diri saya seorang ahli: ada ruang untuk tumbuh. Tetapi pada saat yang sama ada sesuatu untuk dibagikan.

Struktur file proyek


Struktur file adalah hal dasar, tetapi sangat penting. Saat membuat itu, perlu mempertimbangkan kemungkinan penskalaan layanan, karena alasan ini tidak layak menempatkan file dalam struktur datar satu direktori. Perlu hierarki, perlu modularitas.

Saat memberi nama direktori, Anda harus mematuhi standar yang ditetapkan. Ini akan membantu kolega dan dalam beberapa bulan dengan cepat menemukan di mana dan apa yang berada.

Contoh struktur file

src/
    controllers/
         users/
             index.js
         index.js
    db/
         mongo/
             index.js
         index.js
    helpers/
    middlewares/
         auth.js
    models/
         users.js
    routes/
        users/
             index.js
        index.js
    index.js

.eslintrc
.gitignore
README.md
...
package.json

Catatan:

  1. Semua file yang dapat dieksekusi harus terletak di ./src.
    Ini akan memungkinkan Anda untuk memisahkan file sumber dari naskah atau babel yang dikompilasi, yang akan berlokasi di ./dist atau ./build.
    Ini juga akan membuat lebih mudah untuk mengkonfigurasi linter dan alat-alat lain yang dapat dikonfigurasi, karena file target berada di direktori yang terpisah.

  2. Tempatkan semua entitas pengendali dan rute dalam direktori terpisah. Ini akan membuka ./routes atau ./controller dan hanya melihat satu file index.js yang mengimpor dan mengekspor entitas subdirektori.
    Ini akan memungkinkan Anda untuk dengan cepat menavigasi fungsi yang ada, karena hanya menggambarkan antarmuka pengontrol atau router tanpa mempelajari implementasinya.

Tentang Kompilasi Javascript


Tentu saja, Anda tidak dapat menggunakan babel atau naskah untuk mengonversi javascript Anda. Sebagai aturan, standar ECMAScript baru dengan cepat berakhir di node.js, dan Anda, dengan pengecualian javascript berbasis browser, dapat mengontrol dukungan mereka.
Tapi saya yakin mereka layak digunakan. Dan itulah kenapa:

  1. Versi terbaru Node.js tidak selalu tersedia untuk produksi.
  2. Node.js (v. 13) masih memiliki masalah dengan mendukung modul ECMAScript, meskipun mereka muncul dan meninggalkan flag, mereka masih eksperimental. Untuk menjual lebih awal.

Pertimbangkan untuk menambahkan babel ke proyek:

Instal dependensi:

npm install @babel/core @babel/node @babel/preset-env --save-dev

Tambahkan file konfigurasi .babelrc ke root proyek
{
    "presets": [
      "@babel/preset-env"
    ]
}

Contoh skrip dijalankan
"start": "nodemon --exec babel-node src/index.js",

Catatan:

  1. Jangan lupa untuk mengatur sakelar --save-dev (-D) saat menginstal dependensi, yang hanya diperlukan pada tahap pengembangan. Ini diperlukan setidaknya untuk semantik.

Tentang perlunya linter


Mari kita mulai dengan fakta yang jelas: serat diperlukan. Kami menulis kode, banyak kode. Begitu banyak dari itu, mereka sendiri tidak dapat mengendalikan keseragamannya. Item ini sangat ditingkatkan dalam pengembangan tim.

Dan keseragaman adalah kunci keterbacaan kode.

Pertanyaannya tetap tentang ketegaran si penggoda. Pilihan yang harus didasarkan pada ukuran tim, tingkat profesional mereka, kriteria penting adalah proyek itu sendiri.

Menambahkan linter sederhana ke proyek

Mari kita instal dependensi:

npm install eslint --save-dev

Tambahkan file konfigurasi .eslintrc ke root proyek:

{
    "env": {
        "node": true,
        "es6": true,
    },
    "extends": "eslint:recommended"
}

Sebagai aturan, konfigurasi seperti itu tidak cukup. Di sini, perluas aturan sendiri atau lihat lebih dekat opsi yang lebih ketat yang disiapkan.

 ,  
...
    "extends": "eslint:recommended",
    "rules": {
        "quotes": ["error", "single"]
    }
}

Menggunakan linter yang lebih ketat

Ada beberapa konfigurasi populer berdasarkan panduan gaya yang sama.

  • Google

     npm install --save-dev eslint-config-google
    
  • Airbnb

     npm install --save-dev eslint-config-airbnb-base eslint-plugin-import
    
  • Idiomatis
     npm install --save-dev eslint-config-idiomatic
    

Oleh karena itu, perlu untuk memperbaiki .eslintrc

{
    "env": {
        "node": true,
        "es6": true,
    },
    "extends": "google" | "airbnb-base" | "idiomatic"
}

Juga perlu menambahkan peluncuran linter ke skrip terpisah.

"lint": "eslint ./src --cache && echo \"eslint: no lint errors\"",
"lint:fix": "eslint ./src --fix && echo \"eslint: no lint errors\""

Tentang peluncuran aplikasi


Siapa pun yang memiliki akses ke repositori proyek harus dapat menjalankannya. Apakah dia dapat melakukannya dan berapa banyak waktu yang diperlukan baginya untuk melakukan ini adalah salah satu kriteria kualitas proyek Anda.

Penting untuk mendokumentasikan terlebih dahulu cara memulai layanan langkah demi langkah dalam file README.md, serta meresepkan perintah untuk tindakan utama.

"start": "npm run dev",
"dev": "nodemon --exec babel-node ./src/index.js",
"build": "babel ./src --out-dir ./build",
"prod": "NODE_ENV=production node ./build/index.js",
"lint": "eslint ./src --cache && echo \"eslint: no lint errors\"",

Untuk menggunakan perintah di atas, Anda mungkin perlu menginstal paket berikut:

npm install --save-dev @babel/cli nodemon babel-node

catatan:

  1. Jika Anda bahkan menambahkan perintah dasar ke package.json, masih menggambarkan proses startup di README.md.

Kesimpulan


Awalnya, artikel ini ingin membahas lebih banyak rekomendasi untuk menulis API di node.js, tapi saya ingin memuat dalam 3-5 menit. membaca artikel. Tunduk pada umpan balik yang baik, sekuel akan keluar.

All Articles