AdonisJS: NodeJS kiểu Laravel
nodejs
82
Laravel
37
White

Kaopiz Software Co., Ltd. viết ngày 15/03/2019

Trong đợt vừa rồi, mình có cần tìm một framework NodeJS cho dự án. Sau một vòng tìm hiểu mình đã tìm thấy Adonis, một framework NodeJS hoàn thiện được tổ chức theo phong cách giống hệt Laravel!!

AdonisJs là gi ?

AdonisJs là một Nodejs Framework được viết lại đựa trên mô hình MVC và được thiết kế khá giống với Laravel Framework, giống về cấu trúc thư mục và cách viết. Vì thế với những bạn nào đã sữ dụng qua Laravel thì khi tiếp xúc với AdonisJs các bạn sẽ khá dẽ dàng nắm bắt.
Hiện tại trên github, adonis đang có 5777 sao (tại thời điểm viết bài), một lượng sao cũng khá lớn với tuổi đời > 3 năm.

Điểm mạnh của AdonisJs là gi ?

-Tương tác mạnh mẽ trong cơ sở dữ liệu
-Api và cơ chế xác thực
-Dẽ dàng gữi mail với SMTP hoặc các dịch vụ khác
-Cho phép validate input đầu vào
-Bảo mật cao
-Dễ dàng mở rộng

Cài đặt

Cấu trúc thư mục của framework:

alt text

Nếu bạn nào từng làm PHP - Laravel thì sẽ thấy cấu trúc thư mục gần như giống hệt, chỉ khác chút xíu ở thư mục start.
Adonis cũng bao gồm Routing, Middleware, Controllers, Request, Response, Views, Validator, Models, Command, ORM, Config, Env v.v...
Đó là phần vỏ, giờ chúng ta sẽ xem đến phần ruột

Models

Mình ví dụ một model cơ bản:

'use strict'

const Model = use('Model')

class Post extends Model {
  author () {
    return this.belongsTo('App/Models/User', 'user_id')
  }
}

module.exports = Post

Vẫn có model và relation hasOne, hasMany, belongsTo v.v...

Controllers

class UserController {

  async store ({ auth, session, request, response }) {
    /**
     * Getting needed parameters.
     *
     * ref: http://adonisjs.com/docs/4.1/request#_only
     */
    const data = request.only(['username', 'email', 'password', 'password_confirmation'])

    /**
     * Validating our data.
     *
     * ref: http://adonisjs.com/docs/4.1/validator
     */
    const validation = await validateAll(data, {
      username: 'required|unique:users',
      email: 'required|email|unique:users',
      password: 'required',
      password_confirmation: 'required_if:password|same:password',
    })

    /**
     * If validation fails, early returns with validation message.
     */
    if (validation.fails()) {
      session
        .withErrors(validation.messages())
        .flashExcept(['password'])

      return response.redirect('back')
    }

    // Deleting the confirmation field since we don't
    // want to save it
    delete data.password_confirmation

    /**
     * Creating a new user into the database.
     *
     * ref: http://adonisjs.com/docs/4.1/lucid#_create
     */
    const user = await User.create(data)

    // Authenticate the user
    await auth.login(user)

    return response.redirect('/')
  }
}

module.exports = UserController

Middleware

class RedirectIfAuthenticated {
  async handle ({ auth, request, response }, next) {
    /**
     * Verify if we are logged in.
     *
     * ref: http://adonisjs.com/docs/4.0/authentication#_check
     */
    try {
      await auth.check()

      return response.redirect('/')
    } catch (e) {}

    await next()

  }
}

module.exports = RedirectIfAuthenticated

Kết luận

Trên đây mình chỉ đưa ra 1 vài demo để mọi người hiểu qua framework và sự tương đồng của adonis và laravel. Tài liệu chi tiết các bạn có thể tham khảo ở https://adonisjs.com/docs/4.1/installation

Vì vậy nếu ai đã quen thuộc với laravel thì khi cần làm NodeJS có thể lựa chọn Adonisjs.


Bài viết này được trích dẫn từ blog nội bộ công ty KAOPIZ - カオピーズ
Bài gốc: http://kipalog.kaopiz.com/posts/BkWXW7aN859q9pVEhb7__w

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Kaopiz Software Co., Ltd.

27 bài viết.
23 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
50 2
Bài viết này được trích dẫn từ blog nội bộ công ty (Link) (Link) Bài gốc: https://kipalog.kaopiz.com/posts/RegexHocroimanhuchuahoc (Ảnh) 1. Tự...
Kaopiz Software Co., Ltd. viết 8 tháng trước
50 2
White
5 0
Mở Đầu Chắc hẳn là dev ai cũng từng nghe qua về Docker và Virtual Machine (VBox hoặc Vmware). Docker giúp cho việc xây dựng và triển khai một môi ...
Kaopiz Software Co., Ltd. viết 8 tháng trước
5 0
White
5 0
Introduction Elasticsearch là một công cụ tìm kiếm dựa trên nền tảng Apache Lucene. Nó cung cấp một bộ máy tìm kiếm dạng phân tán, có đầy đủ công ...
Kaopiz Software Co., Ltd. viết 8 tháng trước
5 0
Bài viết liên quan
White
1 0
Lâu lâu không động vào nodejs không biết mấy ông tool tiếc này đi đâu về đâu rồi. Trước đây thì mình vẫn có thể dùng istanbul với mocha đơn giản th...
Hà Phạm viết gần 3 năm trước
1 0
White
4 2
Bash script to fast serve Laravel project Lười gõ dòng lệnh quá nên tạo ra cái script để gõ nhanh :D laravelstart.sh /bin/bash if z "$1" ] ...
Vũ Hoàng Chung viết hơn 2 năm trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
27 bài viết.
23 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!