برنامه نویسی

تجربه من با AdonisJS و نحوه ساخت اولین CRUD خود

معرفی

در این مقاله در مورد تجربه فعلی خود با چارچوب Adonijs و MVC (Model-View-Controller) برای Node.js صحبت خواهم کرد.

باید اعتراف کنم که قبلاً تجربه ای با فریمورک داشته ام، با این حال، هرگز از 100% پتانسیل آن استفاده نکرده ام. اخیراً یک پیشنهاد کاری دریافت کردم که باعث شد AdonisJS را به صورت حرفه ای یاد بگیرم و از آن استفاده کنم و هم از مستندات آن که بسیار خوب است و هم از نظر استانداردهای اجباری آن شگفت زده شدم، چیزی که احساس می کنم در فریمورک های Node.js بسیار کم است. مواردی که بیشتر از همه در این زمینه برجسته هستند NestJS و AdonisJS هستند. این برای من (یک موضوع بحث برانگیز) بسیار مهم است.

اسناد و استانداردهای اجباری

مستندات AdonisJS بسیار واضح و دقیق است که منحنی یادگیری و عیب یابی را آسان تر می کند. این همه چیز از مفاهیم اولیه گرفته تا عملکردهای پیشرفته را پوشش می دهد و پایه ای محکم برای توسعه دهندگان در همه سطوح فراهم می کند.

استانداردهای اجباری AdonisJS به سازماندهی و سازگاری کد کمک می کند، که برای نگهداری و مقیاس پذیری پروژه بسیار مهم است. اینجاست که بسیاری از فریمورک‌های Node.js شکست می‌خورند، زیرا فضای زیادی برای تفسیر و پیاده‌سازی توسط توسعه‌دهندگان باقی می‌گذارند. با AdonisJS، یک ساختار کاملاً تعریف شده وجود دارد که توسعه را به طور مؤثر هدایت می کند.

ابزار خود

AdonisJS به دلیل ابزارهای اضافی خود که بسیار جالب هستند متمایز است. به عنوان مثال، Lucid، ORM خود که قبلاً در چارچوب یا حتی CLI خود ادغام شده است، یک رابط خط فرمان قدرتمند و بصری است که به ایجاد و مدیریت پروژه ها کمک می کند، علاوه بر تسهیل کارهای رایج مانند ایجاد مدل ها، کنترلرها و مهاجرت ها
می‌توانم ساعت‌ها در مورد این ابزارها صحبت کنم، مانند Sessions، Auth که با دستور CLI پیکربندی شده است (این باورنکردنی است)، رمزگذاری، ایمیل‌ها و بسیاری دیگر.

ساخت اولین CRUD من با AdonisJS

بعد از این همه تعریف و تمجید فکر می کنم نشان دادن آن در عمل بهتر است تا به شما ثابت کنم چقدر خوب است.

بیایید یک مثال ساده از یک CRUD (ایجاد، خواندن، به‌روزرسانی، حذف) در AdonisJS V6 با استفاده از Lucid ORM و AdonisJS CLI ایجاد کنیم. این مثال شامل ایجاد یک برنامه کاربردی برای مدیریت لیست وظایف است.

1. راه اندازی پروژه

ابتدا اجازه دهید یک پروژه AdonisJS جدید راه اندازی کنیم:

# Instale a CLI do AdonisJS globalmente se ainda não tiver
npm install -g @adonisjs/cli

# Crie um novo projeto AdonisJS
adonis new tasks-app

# Navegue até a pasta do projeto
cd tasks-app

# Instale as dependências
npm install
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. پیکربندی پایگاه داده

پایگاه داده را در فایل config/database.ts پیکربندی کنید. این مثال برای سادگی از SQLite استفاده می کند، اما می توانید از هر پایگاه داده پشتیبانی شده استفاده کنید.

// config/database.ts
const databaseConfig: DatabaseConfig = {
  connection: 'sqlite',

  connections: {
    sqlite: {
      client: 'sqlite3',
      connection: {
        filename: path.join(__dirname, '..', 'database.sqlite')
      },
      useNullAsDefault: true,
      migrations: {
        naturalSort: true,
      },
      healthCheck: false,
      debug: false,
    },
    // Outras configurações de banco de dados...
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3. جدول وظایف را ایجاد کنید

بیایید جدول وظیفه را با استفاده از migrations ایجاد کنیم.

# Criar uma migração para a tabela de tarefas
adonis make:migration tasks --create=tasks
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مهاجرت ایجاد شده را در پایگاه داده/migrations/TIMESTAMP_tasks.ts ویرایش کنید:

import BaseSchema from '@ioc:Adonis/Lucid/Schema'

export default class Tasks extends BaseSchema {
  protected tableName = 'tasks'

  public async up () {
    this.schema.createTable(this.tableName, (table) => {
      table.increments('id')
      table.string('title').notNullable()
      table.text('description')
      table.boolean('is_completed').defaultTo(false)
      table.timestamps(true)
    })
  }

  public async down () {
    this.schema.dropTable(this.tableName)
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مهاجرت را اجرا کنید:

adonis migration:run
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

4. قالب Task را ایجاد کنید

یک مدل برای تعامل با جدول کار ایجاد کنید.

# Criar o modelo Task
adonis make:model Task
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدل تولید شده را در app/Models/Task.ts ویرایش کنید:

import { DateTime } from 'luxon'
import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'

export default class Task extends BaseModel {
  @column({ isPrimary: true })
  public id: number

  @column()
  public title: string

  @column()
  public description: string

  @column()
  public isCompleted: boolean

  @column.dateTime({ autoCreate: true })
  public createdAt: DateTime

  @column.dateTime({ autoCreate: true, autoUpdate: true })
  public updatedAt: DateTime
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

5. Task Controller را ایجاد کنید

یک کنترل کننده برای مدیریت عملیات CRUD ایجاد کنید.

# Criar o controlador TaskController
adonis make:controller Task
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کنترل کننده تولید شده را در app/Controllers/Http/TaskController.ts ویرایش کنید:

import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import Task from 'App/Models/Task'

export default class TaskController {
  public async index({ response }: HttpContextContract) {
    const tasks = await Task.all()
    return response.json(tasks)
  }

  public async store({ request, response }: HttpContextContract) {
    const data = request.only(['title', 'description', 'is_completed'])
    const task = await Task.create(data)
    return response.status(201).json(task)
  }

  public async show({ params, response }: HttpContextContract) {
    const task = await Task.find(params.id)
    if (!task) {
      return response.status(404).json({ message: 'Task not found' })
    }
    return response.json(task)
  }

  public async update({ params, request, response }: HttpContextContract) {
    const task = await Task.find(params.id)
    if (!task) {
      return response.status(404).json({ message: 'Task not found' })
    }

    const data = request.only(['title', 'description', 'is_completed'])
    task.merge(data)
    await task.save()

    return response.json(task)
  }

  public async destroy({ params, response }: HttpContextContract) {
    const task = await Task.find(params.id)
    if (!task) {
      return response.status(404).json({ message: 'Task not found' })
    }

    await task.delete()
    return response.status(204).json(null)
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

6. مسیرها را پیکربندی کنید

فایل مسیرها را در start/routes.ts ویرایش کنید تا مسیرها را برای وظیفه CRUD شامل شود:

import Route from '@ioc:Adonis/Core/Route'

Route.get('/tasks', [TaskController.'index'])
Route.post('/tasks', [TaskController.'store'])
Route.get('/tasks/:id', [TaskController.'show'])
Route.put('/tasks/:id', [TaskController.'update'])
Route.delete('/tasks/:id', [TaskController.'destroy'])
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

7. برنامه را تست کنید

اکنون سرور AdonisJS را راه اندازی کنید:

adonis serve --watch
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دیدی چقدر آسان و سریع است؟ علاوه بر استفاده از CLI برای انجام بیشتر کارها، یک استاندارد را نیز در پروژه خود حفظ می کنید و این خیلی خوب است!!!

ممنون از خواندن مقاله 🙂

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا