توسعه InnerLoop با NodeJS

۱. مرور کلی

این آزمایشگاه ویژگی‌ها و قابلیت‌هایی را نشان می‌دهد که برای ساده‌سازی گردش کار توسعه برای مهندسان نرم‌افزاری که وظیفه توسعه برنامه‌های NodeJS در یک محیط کانتینری را بر عهده دارند، طراحی شده‌اند. توسعه کانتینر معمولاً مستلزم آن است که کاربر جزئیات کانتینرها و فرآیند ساخت کانتینر را درک کند. علاوه بر این، توسعه‌دهندگان معمولاً باید جریان خود را بشکنند و از IDE خود خارج شوند تا برنامه‌های خود را در محیط‌های از راه دور آزمایش و اشکال‌زدایی کنند. با ابزارها و فناوری‌های ذکر شده در این آموزش، توسعه‌دهندگان می‌توانند بدون ترک IDE خود، به طور مؤثر با برنامه‌های کانتینری کار کنند.

آنچه یاد خواهید گرفت

در این آزمایشگاه روش‌های توسعه با کانتینرها در GCP را خواهید آموخت، از جمله:

  • ایجاد یک برنامه اولیه Nodejs
  • پیکربندی برنامه Nodejs برای توسعه کانتینر
  • کدنویسی یک سرویس استراحت CRUD ساده
  • استقرار در GKE
  • اشکال‌زدایی یک حالت خطا
  • استفاده از نقاط شکست/گزارش‌ها
  • تغییرات استقرار سریع (Hot Deploying) به GKE برمی‌گردند
  • اختیاری: ادغام CloudSQL برای پایداری backend

۲. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه ، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود و می‌توانید آن را در هر زمانی به‌روزرسانی کنید.
  • شناسه پروژه باید در تمام پروژه‌های گوگل کلود منحصر به فرد باشد و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاه‌های کد، باید به شناسه پروژه ارجاع دهید (و معمولاً با نام PROJECT_ID شناخته می‌شود)، بنابراین اگر آن را دوست ندارید، یک شناسه تصادفی دیگر ایجاد کنید، یا می‌توانید شناسه خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. سپس پس از ایجاد پروژه، آن "منجمد" می‌شود.
  • یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده می‌کنند. برای اطلاعات بیشتر در مورد هر سه این مقادیر به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/APIهای ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، دستورالعمل‌های «پاکسازی» موجود در انتهای آزمایشگاه کد را دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

ویرایشگر Cloudshell را شروع کنید

این آزمایشگاه برای استفاده با ویرایشگر پوسته ابری گوگل (Google Cloud Shell Editor) طراحی و آزمایش شده است. برای دسترسی به ویرایشگر،

  1. برای دسترسی به پروژه گوگل خود به آدرس https://console.cloud.google.com مراجعه کنید.
  2. در گوشه بالا سمت راست، روی آیکون ویرایشگر پوسته ابری کلیک کنید.

8560cc8d45e8c112.png

  1. یک پنل جدید در پایین پنجره شما باز خواهد شد
  2. روی دکمه باز کردن ویرایشگر کلیک کنید

9e504cb98a6a8005.png

  1. ویرایشگر با یک کاوشگر در سمت راست و ویرایشگر در ناحیه مرکزی باز خواهد شد.
  2. یک پنجره ترمینال نیز باید در پایین صفحه نمایش موجود باشد
  3. اگر ترمینال باز نیست، از ترکیب کلیدهای `ctrl+`` برای باز کردن یک پنجره ترمینال جدید استفاده کنید.

جی کلود را تنظیم کنید

در Cloud Shell، شناسه پروژه و منطقه‌ای که می‌خواهید برنامه‌تان در آن مستقر شود را تنظیم کنید. آن‌ها را به عنوان متغیرهای PROJECT_ID و REGION ذخیره کنید.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

راه‌اندازی کلاستر و پایگاه داده GKE

  1. اسکریپت نصب را دانلود کنید و آن را قابل اجرا کنید.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup.sh
chmod +x setup.sh

فراهم کردن زیرساخت‌های مورد استفاده در این آزمایشگاه

در این آزمایش، شما کد را در GKE مستقر خواهید کرد و به داده‌های ذخیره شده در پایگاه داده Spanner دسترسی خواهید داشت. اسکریپت راه‌اندازی زیر این زیرساخت را برای شما آماده می‌کند.

  1. فایل setup.sh را باز کنید و مقادیر رمزهای عبوری که در حال حاضر روی CHANGEME تنظیم شده‌اند را ویرایش کنید.
  2. اسکریپت راه‌اندازی را اجرا کنید تا یک کلاستر GKE و یک پایگاه داده CloudSQL که در این آزمایش از آن استفاده خواهید کرد، راه‌اندازی شود.
./setup.sh
  1. در Cloud Shell، یک دایرکتوری جدید با نام mynodejsapp ایجاد کنید.
mkdir mynodejsapp
  1. به این پوشه بروید و آن را به عنوان یک فضای کاری باز کنید. این کار ویرایشگر را با ایجاد پیکربندی فضای کاری در پوشه تازه ایجاد شده، مجدداً بارگذاری می‌کند.
cd mynodejsapp && cloudshell workspace .
  1. نصب Node و NPM با استفاده از NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
        
        # This loads nvm bash_completion
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  

nvm install stable

nvm alias default stable

۳. یک برنامه‌ی آغازین جدید ایجاد کنید

  1. مقداردهی اولیه برنامه

ایجاد فایل package.json با اجرای دستور زیر

npm init
    Choose the entry point: (index.js) src/index.js and default values for the rest of the parameters. This will create the file with following contents
{
  "name": "mynodejsapp",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",,
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  1. اضافه کردن نقطه ورود

این فایل را ویرایش کنید تا دستور شروع در اسکریپت "start": "node src/index.js", . پس از تغییر، اسکریپت‌ها باید مانند قطعه کد زیر باشند:

"scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. وابستگی اکسپرس را اضافه کنید

کدی که قرار است اضافه کنیم نیز express استفاده می‌کند، بنابراین اجازه دهید آن وابستگی را به این فایل package.json اضافه کنیم. بنابراین پس از تمام تغییرات، فایل package.json باید مطابق شکل زیر باشد.

​​{
  "name": "mynodejsapp",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Your Name",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.4"
  }
}
  1. فایل index.js را ایجاد کنید

یک دایرکتوری منبع به نام src ایجاد کنید

فایل src/index.js را با کد زیر ایجاد کنید.

const express = require('express');
const app = express();
const PORT = 8080;

app.get('/', (req, res) => {
    var message="Greetings from Node";
    res.send({ message: message });
  });

app.listen(PORT, () => {
  console.log(`Server running at: http://localhost:${PORT}/`);

});

توجه داشته باشید که پورت روی مقدار 8080 تنظیم شده است.

تولید مانیفست

Skaffold ابزارهای یکپارچه‌ای را برای ساده‌سازی توسعه کانتینر فراهم می‌کند. در این مرحله، skaffold را راه‌اندازی اولیه خواهید کرد که به طور خودکار فایل‌های YAML پایه kubernetes را ایجاد می‌کند. برای شروع فرآیند، دستور زیر را اجرا کنید.

دستور زیر را در ترمینال اجرا کنید

skaffold init --generate-manifests

وقتی از شما خواسته شد:

  • برای پورت، عدد ۸۰۸۰ را وارد کنید.
  • برای ذخیره تنظیمات، y را وارد کنید.

دو فایل به فضای کاری اضافه می‌شوند، یعنی skaffold.yaml و deployment.yaml

نام برنامه را به‌روزرسانی کنید

مقادیر پیش‌فرض موجود در پیکربندی در حال حاضر با نام برنامه شما مطابقت ندارند. فایل‌ها را به‌روزرسانی کنید تا به جای مقادیر پیش‌فرض، به نام برنامه شما ارجاع دهند.

  1. تغییر ورودی‌ها در پیکربندی Skaffold
  • skaffold.yaml را باز کنید.
  • نام تصویری که در حال حاضر به عنوان package-json-image تنظیم شده است را انتخاب کنید.
  • کلیک راست کرده و گزینه Change All Occurrences را انتخاب کنید.
  • نام جدید را mynodejsapp تایپ کنید.
  1. تغییر ورودی‌ها در پیکربندی Kubernetes
  • فایل deployment.yaml را باز کنید
  • نام تصویری که در حال حاضر به عنوان package-json-image تنظیم شده است را انتخاب کنید.
  • کلیک راست کرده و گزینه Change All Occurrences را انتخاب کنید.
  • نام جدید را mynodejsapp تایپ کنید.

توجه داشته باشید که در فایل skaffold.yaml ، بخش build buildpacks برای کانتینرایز کردن برنامه استفاده می‌کند. این کد Dockerfile ندارد و توسعه‌دهنده برای کانتینرایز کردن این برنامه به هیچ دانشی در مورد docker نیاز ندارد.

همچنین، همگام‌سازی سریع (hot sync) به طور خودکار بین ویرایشگر و کانتینر در حال اجرا توسط این پیکربندی skaffold فعال می‌شود. برای فعال کردن همگام‌سازی سریع نیازی به پیکربندی اضافی نیست.

۴. گام برداشتن در مسیر توسعه

در این بخش، چند مرحله را با استفاده از افزونه Cloud Code طی خواهید کرد تا فرآیندهای اولیه را بیاموزید و پیکربندی و راه‌اندازی برنامه اولیه خود را تأیید کنید.

Cloud Code با skaffold ادغام می‌شود تا فرآیند توسعه شما را ساده‌تر کند. وقتی در مراحل بعدی در GKE مستقر می‌شوید، Cloud Code و Skaffold به طور خودکار تصویر کانتینر شما را می‌سازند، آن را به یک رجیستری کانتینر منتقل می‌کنند و سپس برنامه شما را در GKE مستقر می‌کنند. این اتفاق در پشت صحنه رخ می‌دهد و جزئیات را از جریان توسعه‌دهنده جدا می‌کند. Cloud Code همچنین با ارائه قابلیت‌های اشکال‌زدایی سنتی و همگام‌سازی سریع به توسعه مبتنی بر کانتینر، فرآیند توسعه شما را بهبود می‌بخشد.

استقرار در Kubernetes

  1. در پنل پایین ویرایشگر Cloud Shell، گزینه Cloud Code  را انتخاب کنید.

fdc797a769040839.png

  1. در پنلی که در بالا ظاهر می‌شود، گزینه Run on Kubernetes را انتخاب کنید. در صورت درخواست، برای استفاده از متن فعلی Kubernetes، گزینه Yes را انتخاب کنید.

cfce0d11ef307087.png

  1. اولین باری که دستور را اجرا می‌کنید، پیامی در بالای صفحه ظاهر می‌شود که از شما می‌پرسد آیا می‌خواهید از چارچوب فعلی kubernetes استفاده کنید یا خیر. برای پذیرش و استفاده از چارچوب فعلی، «بله» را انتخاب کنید.

۸۱۷ee33b5b412ff8.png

  1. در مرحله بعد، پیامی نمایش داده می‌شود که از شما می‌پرسد از کدام رجیستری کانتینر استفاده کنید. برای پذیرش مقدار پیش‌فرض ارائه شده، Enter را فشار دهید.

eb4469aed97a25f6.png

  1. برای مشاهده پیشرفت و اعلان‌ها، برگه خروجی را در پنل پایین انتخاب کنید.

f95b620569ba96c5.png

  1. برای مشاهده جزئیات بیشتر و گزارش‌های زنده از کانتینرها، در منوی کشویی سمت راست، گزینه "Kubernetes: Run/Debug - Detailed" را انتخاب کنید.

94acdcdda6d2108.png

  1. با انتخاب "Kubernetes: Run/Debug" از منوی کشویی، به نمای ساده‌شده برگردید.
  2. وقتی ساخت و آزمایش‌ها انجام شد، در برگه خروجی نوشته می‌شود: Resource deployment/mynodejsapp status completed successfully ، و یک آدرس اینترنتی فهرست شده است: "URL ارسال شده از سرویس demo-app: http://localhost:8080"
  3. در ترمینال Cloud Code، نشانگر ماوس را روی URL موجود در خروجی (http://localhost:8080) نگه دارید و سپس در ابزار نمایش داده شده، گزینه Open Web Preview را انتخاب کنید.

پاسخ این خواهد بود:

{"message":"Greetings from Node"}

بارگیری مجدد داغ

  1. به src/index.js بروید. کد پیام خوشامدگویی را به 'Hello from Node' ویرایش کنید.

فوراً توجه کنید که در پنجره Output ، نمای Kubernetes: Run/Debug ، ناظر فایل‌های به‌روزرسانی‌شده را با کانتینر در Kubernetes همگام‌سازی می‌کند.

Update initiated
File sync started for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
File sync succeeded for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Update succeeded
  1. اگر به Kubernetes: Run/Debug - Detailed ، متوجه خواهید شد که تغییرات فایل را تشخیص می‌دهد و گره را مجدداً راه‌اندازی می‌کند.
files modified: [src/index.js]
Copying files:map[src/index.js:[/workspace/src/index.js]]togcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Syncing 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Watching for changes...
[mynodejsapp]
[mynodejsapp]> mynodejsapp@1.0.0 start /workspace
[mynodejsapp]> node src/index.js
[mynodejsapp]
[mynodejsapp]Server running at: http://localhost:8080/
  1. برای مشاهده نتایج به‌روزرسانی‌شده، مرورگر خود را به‌روزرسانی کنید.

اشکال‌زدایی

  1. به نمای اشکال‌زدایی (Debug view) بروید و رشته فعلی را متوقف کنید. ۶۴۷۲۱۳۱۲۶d7a4c7b.png .
  2. در منوی پایین روی Cloud Code کلیک کنید و Debug on Kubernetes را انتخاب کنید تا برنامه در حالت debug اجرا شود.
  • در پنجره Kubernetes Run/Debug - Detailed از پنجره Output ، توجه داشته باشید که skaffold این برنامه را در حالت اشکال‌زدایی مستقر خواهد کرد.
  • ساخت و استقرار برنامه چند دقیقه طول می‌کشد. این بار متوجه خواهید شد که یک اشکال‌زدا (دیباگر) پیوست شده است.
Port forwarding pod/mynodejsapp-6bbcf847cd-vqr6v in namespace default, remote port 9229 -> http://127.0.0.1:9229
[mynodejsapp]Debugger attached.
  1. نوار وضعیت پایین، رنگ خود را از آبی به نارنجی تغییر می‌دهد که نشان می‌دهد در حالت اشکال‌زدایی (Debug mode) است.
  2. در نمای Kubernetes Run/Debug ، توجه کنید که یک کانتینر Debuggable آغاز شده است.
**************URLs*****************
Forwarded URL from service mynodejsapp-service: http://localhost:8080
Debuggable container started pod/mynodejsapp-deployment-6bc7598798-xl9kj:mynodejsapp (default)
Update succeeded
***********************************

استفاده از نقاط شکست

  1. فایل src/index.js را باز کنید.
  2. دستوری را پیدا کنید که var message="Greetings from Node"; را می‌خواند.
  3. با کلیک کردن روی فضای خالی سمت چپ شماره خط، یک نقطه توقف به آن خط اضافه کنید. یک نشانگر قرمز نشان داده می‌شود که نشان می‌دهد نقطه توقف تنظیم شده است.
  4. مرورگر خود را مجدداً بارگذاری کنید و توجه داشته باشید که اشکال‌زدا فرآیند را در نقطه توقف متوقف می‌کند و به شما امکان می‌دهد متغیرها و وضعیت برنامه‌ای را که از راه دور در GKE اجرا می‌شود، بررسی کنید.
  5. در بخش متغیرها کلیک کنید تا متغیر "message" را پیدا کنید.
  6. با فشار دادن Step over، خط را اجرا کنید. 7cfdee4fd6ef5c3a.png
  7. مشاهده می‌کنید که مقدار فعلی متغیر "message" به "Greetings from Node" تغییر یافته است.
  8. روی متغیر «target» دوبار کلیک کنید و در پنجره باز شده، مقدار آن را به چیزی متفاوت مانند "Hello from Node" تغییر دهید.
  9. روی دکمه ادامه در پنل کنترل اشکال‌زدایی کلیک کنید
  10. پاسخ را در مرورگر خود بررسی کنید که اکنون مقدار به‌روزرسانی‌شده‌ای را که وارد کرده‌اید نشان می‌دهد.
  11. با فشار دادن دکمه توقف، حالت «اشکال‌زدایی» را متوقف کنید ۶۴۷۲۱۳۱۲۶d7a4c7b.png و با کلیک مجدد روی نقطه شکست، آن را حذف کنید.

۵. توسعه یک سرویس ساده CRUD Rest

در این مرحله، برنامه شما به طور کامل برای توسعه کانتینری پیکربندی شده است و شما گردش کار اولیه توسعه را با Cloud Code طی کرده‌اید. در بخش‌های بعدی، با اضافه کردن نقاط پایانی سرویس rest که به یک پایگاه داده مدیریت شده در Google Cloud متصل می‌شوند، آموخته‌های خود را تمرین می‌کنید.

پیکربندی وابستگی‌ها

کد برنامه از یک پایگاه داده برای ذخیره داده‌های سرویس rest استفاده می‌کند. با اضافه کردن موارد زیر در فایل package.json از در دسترس بودن وابستگی‌ها اطمینان حاصل کنید.

  1. دو وابستگی دیگر را به sequelize pg اضافه کنید و به فایل package.json اضافه کنید تا یک برنامه CRUD در Postgres بسازید. پس از اعمال تغییرات، بخش وابستگی‌ها به این شکل خواهد بود.
    "dependencies": {
    "express": "^4.16.4",
    "pg": "^8.7.3",
    "sequelize": "^6.17.0"
  }

کدنویسی سرویس REST

  1. کد برنامه CRUD را به این برنامه اضافه کنید
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip

unzip app.zip

این کد دارای

  • پوشه‌ی models با موجودیت مدل برای item
  • پوشه کنترلرها حاوی کدی است که عملیات CRUD را انجام می‌دهد.
  • پوشه مسیرها که الگوهای URL خاص را به فراخوانی‌های مختلف هدایت می‌کند
  • پوشه پیکربندی حاوی جزئیات اتصال به پایگاه داده
  1. توجه داشته باشید که پیکربندی پایگاه داده در فایل db.config.js به متغیرهای محیطی اشاره دارد که برای اتصال به پایگاه داده باید ارائه شوند. همچنین باید درخواست ورودی را برای کدگذاری url تجزیه کنید.
  2. قطعه کد زیر را در src/index.js اضافه کنید تا بتوانید درست قبل از آخرین بخشی که با app.listen(PORT, () => { شروع می‌شود، به کد CRUD از فایل اصلی جاوا اسکریپت خود متصل شوید.
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(
 bodyParser.urlencoded({
   extended: true,
 })
)
const db = require("../app/models");
db.sequelize.sync();
require("../app/routes/item.routes")(app);
  1. فایل deployment.yaml را ویرایش کنید تا متغیرهای محیطی لازم برای ارائه اطلاعات اتصال پایگاه داده را اضافه کنید.

ورودی مشخصات را در انتهای فایل به‌روزرسانی کنید تا با تعریف زیر مطابقت داشته باشد

    spec:
      containers:
      - name: mynodejsapp
        image: mynodejsapp
        env:
        - name: DB_HOST
          value: ${DB_INSTANCE_IP}        
        - name: DB_PORT
          value: "5432"  
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: username
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: password
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: database
  1. مقدار DB_HOST را با آدرس پایگاه داده خود جایگزین کنید.
export DB_INSTANCE_IP=$(gcloud sql instances describe mytest-instance \
    --format=json | jq \
    --raw-output ".ipAddresses[].ipAddress")

envsubst < deployment.yaml > deployment.new && mv deployment.new deployment.yaml

استقرار و اعتبارسنجی برنامه

  1. در پنل پایین ویرایشگر Cloud Shell، گزینه Cloud Code و سپس Debug on Kubernetes را در بالای صفحه انتخاب کنید.
  2. وقتی ساخت و آزمایش‌ها انجام شد، در برگه خروجی نوشته می‌شود: Resource deployment/mynodejsapp status completed successfully ، و یک آدرس اینترنتی فهرست شده است: "URL ارسال شده از سرویس mynodejsapp: http://localhost:8080"
  3. یکی دو مورد اضافه کنید.

از ترمینال cloudshell، دستورات زیر را اجرا کنید

URL=localhost:8080
curl -X POST $URL/items -d '{"itemName":"Body Spray", "itemPrice":3.2}' -H "Content-Type: application/json"
curl -X POST $URL/items -d '{"itemName":"Nail Cutter", "itemPrice":2.5}' -H "Content-Type: application/json"
  1. با اجرای دستور $URL/items در مرورگر، GET را آزمایش کنید. همچنین می‌توانید curl را از خط فرمان اجرا کنید.
curl -X GET $URL/items
  1. حذف آزمایشی: اکنون با اجرای دستور زیر سعی کنید یک آیتم را حذف کنید. در صورت لزوم مقدار item-id را تغییر دهید.
curl -X DELETE $URL/items/1
    This throws an error message
{"message":"Could not delete Item with id=[object Object]"}

شناسایی و رفع مشکل

  1. برنامه را در حالت اشکال‌زدایی (Debug mode) مجدداً راه‌اندازی کنید و مشکل را پیدا کنید. در اینجا چند نکته وجود دارد:
  • ما می‌دانیم که مشکلی در DELETE وجود دارد زیرا نتیجه دلخواه را برنمی‌گرداند. بنابراین، شما باید نقطه توقف را در متد itemcontroller.js -> exports.delete تنظیم کنید.
  • اجرای گام به گام را اجرا کنید و متغیرها را در هر مرحله زیر نظر داشته باشید تا مقادیر متغیرهای محلی را در پنجره سمت چپ مشاهده کنید.
  • برای مشاهده مقادیر خاص مانند request.params این متغیر را به پنجره Watch اضافه کنید.
  1. توجه داشته باشید که مقداری که به id اختصاص داده شده است undefined است. برای رفع مشکل، کد را تغییر دهید.

قطعه کد ثابت به این شکل خواهد بود.

// Delete a Item with the specified id in the request
exports.delete = (req, res) => {
    const id = req.params.id;
  1. پس از راه‌اندازی مجدد برنامه، دوباره با تلاش برای حذف، آن را امتحان کنید.
  2. با کلیک روی مربع قرمز در نوار ابزار اشکال‌زدایی، جلسه اشکال‌زدایی را متوقف کنید. ۶۴۷۲۱۳۱۲۶d7a4c7b.png

۶. پاکسازی

تبریک! در این آزمایش شما یک برنامه Nodejs جدید را از ابتدا ایجاد و آن را برای کار در حالت استقرار داغ با کانتینرها پیکربندی کرده‌اید. سپس برنامه خود را طبق همان جریان توسعه‌دهنده‌ای که در پشته‌های برنامه سنتی یافت می‌شود، در یک خوشه GKE از راه دور مستقر و اشکال‌زدایی کرده‌اید.

برای تمیز کردن پس از اتمام آزمایشگاه:

  1. فایل‌های استفاده شده در آزمایشگاه را حذف کنید
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
  1. پروژه را حذف کنید تا تمام زیرساخت‌ها و منابع مرتبط حذف شوند.