كيفية تحسين خدمة API الخاصة بك على node.js. الجزء الأول

هناك كمية مناسبة من المواد متاحة الآن عند كتابة واجهة برمجة التطبيقات على node.js. معظمها في شكل دروس وعروض توضيحية في الوثائق. هذا يكفي لمعرفة وكتابة شيء خاص بهم بسرعة. لكنهم نادرا ما يجدون تفاصيل حول سبب القيام بذلك بهذه الطريقة. ويتم حذف بعض النقاط تمامًا من أجل البساطة والإيجاز.

الغرض من هذه المقالة هو سد بعض الفجوات التي قد تنشأ ، وتحسين خدمتك في نهاية المطاف على node.js.

سكرتير خاص في أي حال من الأحوال لا أعتبر نفسي خبيرا: هناك مجال للنمو. ولكن في نفس الوقت هناك شيء للمشاركة.

هيكل ملف المشروع


هيكل الملف هو شيء أساسي ولكنه مهم للغاية. عند إنشائه ، يجدر النظر في إمكانية توسيع نطاق الخدمة ، ولهذا السبب لا يستحق وضع الملفات في الهيكل المسطح لدليل واحد. تحتاج إلى تسلسل هرمي ، تحتاج إلى نمطي.

عند تسمية الدلائل ، يجب عليك الالتزام بالمعايير المعمول بها. سيساعد ذلك الزملاء وفي غضون أشهر قليلة على معرفة مكان ومكان وجودهم بسرعة.

مثال على بنية الملف

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

ملاحظات:

  1. يجب أن تكون جميع الملفات القابلة للتنفيذ موجودة في .src.
    سيسمح لك هذا بفصل الملفات المصدر عن نسخة مطبوعة مجمعة أو babel ، والتي ستكون موجودة في .dist أو ./build.
    كما أنه سيسهل تكوين linters والأدوات الأخرى القابلة للتكوين ، حيث توجد الملفات الهدف في دليل منفصل.

  2. ضع جميع كيانات وحدة التحكم والتوجيه في أدلة منفصلة. سيؤدي ذلك إلى فتح ملف ./routes أو ./controller والاطلاع على ملف index.js واحد فقط يقوم باستيراد وتصدير كيانات الدليل الفرعي.
    سيسمح لك ذلك بالتنقل بسرعة في الوظائف الحالية ، لأنه يصف فقط واجهة وحدات التحكم أو أجهزة التوجيه دون الخوض في تنفيذها.

حول تجميع جافا سكريبت


بالطبع ، لا يمكنك استخدام babel أو typcript لتحويل جافا سكريبت. كقاعدة ، تنتهي معايير ECMAScript الجديدة بسرعة في node.js ، ويمكنك ، باستثناء جافا سكريبت المستند إلى المتصفح ، التحكم في دعمها.
لكنني مقتنع أنها تستحق استخدامها. ولهذا السبب:

  1. لا يتوفر أحدث إصدار من Node.js للإنتاج دائمًا.
  2. لا تزال Node.js (الإصدار 13) تواجه مشكلات في دعم وحدات ECMAScript ، على الرغم من أنها ظهرت وتركت العلم ، إلا أنها لا تزال تجريبية. للبيع في وقت مبكر.

ضع في اعتبارك إضافة بابل إلى المشروع:

قم بتثبيت التبعيات:

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

قم بإضافة ملف التكوين .babelrc إلى جذر المشروع
{
    "presets": [
      "@babel/preset-env"
    ]
}

مثال على تشغيل النص
"start": "nodemon --exec babel-node src/index.js",

ملاحظات:

  1. عند تثبيت التبعيات ، لا تنس أن تضع مفتاح -save-dev (-D) فقط أثناء مرحلة التطوير. من الضروري على الأقل لدلالات.

حول الحاجة إلى اللنت


لنبدأ بالحقيقة الواضحة: هناك حاجة إلى الوبر. نكتب رمز ، الكثير من التعليمات البرمجية. الكثير من ذلك ، هم أنفسهم غير قادرين على التحكم في توحيده. تم تحسين هذا العنصر بشكل لا يصدق في تطوير الفريق.

والتوحيد هو مفتاح قراءة التعليمات البرمجية.

يبقى السؤال حول صرامة اللبيدة. يجب أن يعتمد اختياره على حجم الفريق ومستواه المهني ، وهو معيار مهم هو المشروع نفسه.

إضافة لنتر بسيط للمشروع

دعنا نثبت التبعيات:

npm install eslint --save-dev

أضف ملف التكوين .eslintrc إلى جذر المشروع:

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

كقاعدة عامة ، لا يكفي هذا التكوين. هنا إما توسيع القواعد بنفسك أو إلقاء نظرة فاحصة على الخيارات الأكثر صرامة المعدة.

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

استخدام لنتر أكثر صرامة

هناك العديد من التكوينات الشائعة بناءً على أدلة النمط نفسها.

  • جوجل

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

     npm install --save-dev eslint-config-airbnb-base eslint-plugin-import
    
  • اصطلاحي
     npm install --save-dev eslint-config-idiomatic
    

وفقًا لذلك ، سيكون من الضروري تصحيح .eslintrc

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

تحتاج أيضًا إلى إضافة إطلاق اللنت إلى نص منفصل.

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

حول تشغيل التطبيق


يجب أن يكون أي شخص لديه حق الوصول إلى مستودع المشروع قادراً على تشغيله. ما إذا كان بإمكانه القيام بذلك وكم من الوقت سيستغرقه للقيام بذلك هو أحد معايير جودة مشروعك.

من المهم توثيق مقدمًا كيفية بدء الخدمة خطوة بخطوة في ملف README.md ، فضلاً عن وصف أوامر الإجراءات الرئيسية.

"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\"",

لاستخدام الأوامر المذكورة أعلاه ، قد تحتاج إلى تثبيت الحزم التالية:

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

ملحوظة:

  1. حتى إذا أضفت الأوامر الأساسية إلى package.json ، فلا يزال يصف عملية بدء التشغيل في README.md.

استنتاج


في البداية ، أرادت المقالة تغطية المزيد من التوصيات حول كتابة واجهة برمجة تطبيقات على node.js ، لكني أريد احتواءها في غضون 3-5 دقائق. قراءة المقال. مع مراعاة التعليقات الجيدة ، ستظهر تكملة.

All Articles