پرش به مطلب اصلی

شروع

نحوه‌ی ساخت پروژه و شروع کار با نود

شروع توسعه

برای شروع توسعه یک برنامه‌ی Node.js در دایرکتوری پروژه یک فایل index.js بساز. این فایل رو میتونی با node ./index.js هربار ران بکنی

همچنین برای شروع کار فایل package.json نیاز هست که با کامند npm init -y میتونه به صورت خودکار بسازتش

nodemon

ابزاری هست که برای اجرا فایل index.js نیاز نیست هربار node ./index.js بزنیم. بلکه با هر تغییر خودش این کامند رو میزنه و به اصطلاح hot reload هست

نصب :

npm install nodemon

استفاده :

ابتدا به فایل packages.json یک کامند قابل فهم اضافه میکنیم

packages.json
"scripts":{
"dev" : "nodemon node index.js"
}

حال صرفا یکبار کامند npm run dev رو باید ران کنیم

انواع ماژول‌ها

در کل در node.js ما ۲ نوع ماژول داریم. یکی commonjs و دیگری es module که به صورت پیش فرض node از CommonJS استفاده میکند

در فایل packages.json باید مشخص شود چه نوعی از ماژول استفاده میکنیم

packages.json
"type":"commonjs"

در این حالت از ماژول CommonJS استفاده میکند

packages.json
"type":"moudle"

در این حالت از ماژول ES Module استفاده میکند

CommonJS

Export :

export.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
const multiple = (a, b) => a * b;

module.exports.add = add;
module.exports.subtract = subtract;

module.exports = multiple;

Import :

import.js
const { add, subtract } = require("./export.js");
const multiple = require("./export.js");

console.log(add(3, 5));
console.log(subtract(3, 5));
console.log(multiple(3, 5));

در کل اگر به فرمت module.exports.name باشه هنگام import باید همراه با name آنرا import کرد

درصورتی که به فرمت module.exports باشد آن را صورت دیفالت میتوان ایمپورت کرد و هر نام دلخواهی میتوان برای آن گذاشت.

ES Module

export.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
const multiple = (a, b) => a * b;

export { add, subtract };

export default multiple;
import.js
import multiple, { subtract, add } from "./export.js";

console.log(add(3, 5));
console.log(subtract(3, 5));
console.log(multiple(3, 5));

درکل اگر به فرمت export {name} باشد باید هنگام import باید همراه با name آن و به فرمت import {name} from نوشت

دروصرتی که به فرمت export default بنویسیم نیازی به name نیست و میتوان به صورت import X from استفاده کرد که میتوان نام دلخواه به آن داد

Absolute Alias

اطلاع

در ابتدا اشاره میکنم که متد proccess.cwd() که به طور پیش‌فرض داخل node.js وجود داره مسیر root پروژه یا جایی که فایل package.json وجود داره رو بهش اشاره میکنه

برای مسیردهی به فایل‌ها، ماژول‌ها، مدل‌ها و ... ما نمیتونیم هربار چندین بار ../../ بزنیم چونکه اگر یکبار صرفا یک فایل رو جاشو عوض کنیم باید در تمام فایل‌ها مسیرش رو تغییر بدیم

برای همین ما از مسیردهی absolute استفاده میکنیم و معمولا با @ شروعش میکنیم

Module Alias

یک پکیج هست که میتونیم ازش برای مسیردهی استفاده کنیم

npm install module-alias

سپس توی فایل package.json مسیر هایی رو که میخوایم تعریف میکنیم

package.json
{
"_moduleAliases": {
"@": "./src",
"@controller": "./src/controller",
"@model": "./src/model",
"@middleware": "./src/middleware",
"@router": "./src/router",
"@util": "./src/util",
"@config": "./src/util/config",
"@function": "./src/util/function"
}
}

سپس در بالاترین سطح برنامه module-alias/register رو ایمپورت میکنیم. دقت کن که یکبار در بالاترین سطح برنامه کافی هست ایمپورتش و نیازی نیست توی هر فایل مجدد ایمپورت کنیم برای استفاده

server.js
require("module-alias/register");
const express = require("express");
// ...

سپس میتونیم از module-alias توی فایل‌های مختلف برنامه استفاده بکنیم و نیازی به ایمپورت مجدد چیزی نیست.

برای مثال :

example
// router
const { RegisterController } = require("@controller/auth/register.controller");
const { LoginController } = require("@controller/auth/login.controller");
const { LogoutController } = require("@controller/auth/logout.controller");

// model
const { UserModel } = require("@model/user.model");

// function
const { verifyTokne } = require("@function/token");

سپس به این نحو استفاده میکنیم ازش

Typescript Config

اگر با تایپ‌اسکریپت توسعه میدی میتونی توی فایل tsconfig.json مسیرهارو تعریف کنی

tsconfig.json
{
"compilerOptions": {
// ...
"paths": {
"@/*": ["./src/*"],
"@controller/*": ["./src/controller/*"],
"@model/*": ["./src/model/*"],
"@middleware/*": ["./src/middleware/*"],
"@router/*": ["./src/router/*"],
"@util/*": ["./src/util/*"],
"@config/*": ["./src/util/config/*"],
"@function/*": ["./src/util/function/*"]
}
}
}

سپس نیازی به هیچ ایمپورت و چیز خاصی نیست صرفا توی فایل‌ها میتونی به راحتی ازش استفاده کنی

example
// router
const { RegisterController } = require("@controller/auth/register.controller");
const { LoginController } = require("@controller/auth/login.controller");
const { LogoutController } = require("@controller/auth/logout.controller");

// model
const { UserModel } = require("@model/user.model");

// function
const { verifyTokne } = require("@function/token");