تحویل پروژه و مسیر بعدی؛ از ویندوز محلی تا بکاند واقعی
در این درس ۸ بخش
در پایان دوره باید بتوانید پروژه را روی یک پوشهٔ تازه اجرا کنید، یک رفتار ناموفق را توضیح دهید و محدودیت نسخهٔ فعلی را صادقانه بیان کنید. تحویل خوب فقط کد زیاد نیست؛ نفر بعد باید بداند چه نسخهای لازم است، از کجا اجرا کند، موفقیت را چگونه ببیند و با خطای متداول چه کند. این API در حافظه نگهداری میشود، هویت کاربر ندارد و برای دسترسی محلی طراحی شده است. آن را بهعنوان محصول آمادهٔ انتشار اینترنتی معرفی نکنید.
تنظیم جدا از کد، بدون راز واقعی
فایل .env.example را با متن زیر بسازید. وجود این نمونه فقط نام تنظیمات مورد نیاز را نشان میدهد و نباید حاوی رمز یا توکن واقعی باشد. برای اجرای معمول npm.cmd start داشتن .env لازم نیست؛ پورت پیشفرض ۳۰۰۰ است. اگر پورت دیگری میخواهید، .env.example را به .env کپی و مقدار آن را در ویرایشگر تغییر دهید. دستور start:env فایل را صریح بارگذاری میکند و نبودن فایل را بهعنوان اشتباه تنظیم آشکار میسازد.
فایل .env.example
PORT=3000
فایل .gitignore
node_modules/
.env
*.log
Copy-Item .env.example .env
# در ویرایشگر PORT را 3100 کنید.
npm.cmd run start:envاگر PORT از قبل در محیط فرایند تعیین شده باشد، مقدار محیط بر فایل مقدم است. این موضوع گاهی علت شنیدن سرور روی پورتی متفاوت از انتظار است. در PowerShell مقدار $env:PORT را بررسی کنید و فقط اگر خودتان آن را برای همین تمرین گذاشتهاید، با Remove-Item Env:PORT از همان جلسه حذف کنید؛ تنظیم سراسری سیستم لازم نیست. سپس مشتری درس ۱۸ را نیز با همان پورت هماهنگ کنید. تغییر یک سمت بدون تغییر سمت دیگر، خطای اتصال کاملاً طبیعی ایجاد میکند.
عیبیابی بر اساس نشانه، نه نصب دوبارهٔ همه چیز
اگر node شناخته نمیشود، پیش از تغییر کد PATH و مسیر برنامهٔ نصبشده را بررسی کنید. اگر npm.ps1 مسدود است، npm.cmd را صریح اجرا کنید و سیاست امنیتی را کاهش ندهید. اگر Missing script دیده میشود، پوشهٔ فعلی و package.json همان پوشه را بررسی کنید. ERR_MODULE_NOT_FOUND معمولاً به نام، پسوند یا مسیر فایل مربوط است؛ نصبکردن بستهای تصادفی جای model.mjs گمشده را پر نمیکند. SyntaxError نیز ابتدا نام فایل و خط اشارهشده را میخواهد، نه تغییر پورت.
اگر EADDRINUSE رخ داد، نمونهٔ قبلی خودتان را در ترمینال همان برنامه متوقف کنید یا برای این نمونه پورت آزاد دیگری برگزینید. اگر اتصال رد میشود، /health را با پورت نمایشدادهشده امتحان کنید. اگر ۴۱۵ دارید Content-Type و Content-Encoding را بررسی کنید؛ ۴۰۰ معمولاً بدنهٔ JSON یا UTF-8 را میخواهد و ۴۲۲ فیلد یا نوع آن را. اگر ۴۰۴ مربوط به یک شناسه است، به یاد بیاورید راهاندازی دوباره، همهٔ شناسههای قبلی این پروژه را از بین میبرد.
پذیرش نهایی قابل تکرار
در پوشهٔ تازه، چهار فایل اجرایی مدل، برنامه، ورودی سرور و آزمون را همراه package.json قرار دهید. check و test را اجرا کنید، سپس سرور را روشن کنید و از ترمینال دوم جریان ساخت، خواندن و تغییر را انجام دهید. یک درخواست نامعتبر هم بفرستید و حفظ دادهٔ قبلی را ببینید. سرور را متوقف کنید و به خالیشدن فهرست پس از شروع دوباره توجه کنید. این رفتار «از دسترفتن ناگهانی دیتابیس» نیست؛ دقیقاً قرارداد ذخیرهسازی حافظهای این نسخه است.
برای سمت سرور واقعی، ترتیب یادگیری چیست؟
گام بعدی میتواند Express یا Fastify برای مسیرها و middleware باشد، ولی فهم HTTP و اعتبارسنجی را حذف نمیکند. سپس پایگاه دادهٔ رابطهای مانند PostgreSQL یا SQLite، طراحی جدول، query پارامتری، مهاجرت و transaction را یاد بگیرید. برای چند کاربر، فقط افزودن password به همین Map کافی نیست؛ باید احراز هویت، نگهداری امن اعتبارنامه و کنترل مالکیت هر منبع طراحی شود. UUID تصادفی بهتنهایی مانع دسترسی کاربر دیگر نیست. دادهٔ دائمی نیز پشتیبان و آزمون بازیابی میخواهد.
استقرار روی سرور به فرایند پایدار، TLS، ثبت رخداد بدون افشای راز، کنترل نرخ، بهروزرسانی و پایش نیاز دارد. مقصد Linux باشد، WSL میتواند بخشی از تمرین سازگاری محیط باشد و دورهٔ لینوکس درسآوند پیشنیاز مفیدی میشود؛ WSL خودش سرویس میزبانی عمومی نیست. برای پروژهٔ CPU سنگین نیز انتخاب worker یا صف کار باید بر اساس اندازهگیری باشد. در این مرحله فقط گوشدادن روی 0.0.0.0 یا خرید VPS، هیچیک از این نیازها را خودکار حل نمیکند.
تمرین جمعبندی و پاسخ راهنما
یک README کوتاه برای همکلاسی بنویسید: نسخهٔ Node، دستورهای اجرا، مسیر سلامت، قرارداد ساخت، شیوهٔ توقف و محدودیت حافظه را ذکر کنید. سپس از او بخواهید بدون راهنمایی شفاهی، یک کار فارسی بسازد و یک درخواست اشتباه را تشخیص دهد. پاسخ راهنما همین ترتیب پذیرش است؛ اگر او ناچار شد محل فایلها یا پورت را حدس بزند، راهنما هنوز کامل نیست. معیار پایان دوره، اجرای قابل تکرار و توان توضیح مسئولیت سرور است؛ تعداد نرمافزارهای نصبشده معیار مهارت نیست.
مرجع و ادامهٔ مسیر
گزینهٔ env-file در Node.js: https://nodejs.org/api/cli.html#--env-filefile
آموزشهای رسمی Node.js: https://nodejs.org/en/learn
آموزش لینوکس درسآوند: https://www.darsavand.com/courses/linux-server-from-zero
تألیف و مثالهای اختصاصی: تحریریه درسآوند.
متن درسهای عمومی را بدون ورود بخوانید.