Mencoba AdonisJS 4.0 : Setup Project

AdonisJS 4.0 “Dawn” sudah memasuki tahap Pre-release. Walaupun secara resmi belum dirilis, namun kita sudah bisa mencicipi web framework nodejs ini. Pada tulisan ini, saya akan mencoba fitur AdonisJS antara lain, Adonis CLI untuk scaffold project, Routing, Model dan Migrations.

Adonis CLI

Untuk memulai, kita butuh nodejs dan @adonis/cli terinstall di komputer. Untuk install nodejs, silahkan cari refrensi sendiri, untuk @adonisjs/cli dapat diinstall menggunakan perintah

npm install @adonisjs/cli -g

Setup Project

Buat project baru dengan menjalankan

adonis new dawn-blog

# Output

    _       _             _         _
   / \   __| | ___  _ __ (_)___    | |___
  / _ \ / _` |/ _ \| '_ \| / __|_  | / __|
 / ___ \ (_| | (_) | | | | \__ \ |_| \__ \
/_/   \_\__,_|\___/|_| |_|_|___/\___/|___/

✔ Your current Node.js & npm version match the AdonisJs requirements!
✔ Cloned [adonisjs/adonis-slim-app]
✔ npm: Dependencies installed
✔ Default environment variables copied
✔ generated unique APP_KEY
┌───────────────────────────────────┐
│        Application crafted        │
│                                   │
│        cd dawn-blog               │
│        adonis serve               │
└───────────────────────────────────┘

Kemudian jalankan local web server dengan perintah

adonis serve --dev

# Output
2017-08-12T07:14:01.632Z - info: serving app on http://127.0.0.1:3333

Buka http://localhost:3333 di browser

Install Lucid ORM

Secara default adonis cli menggunakan template adonis-slim-app sehinga Lucid ORM harus kita install secara manual.

adonis install @adonisjs/lucid

Buka berkas start/app.js dan edit bagian providers menjadi seperti berikut

const providers = [
  '@adonisjs/lucid/providers/LucidProvider'
]

dan juga bagian aceProviders

const aceProviders = [
  '@adonisjs/lucid/providers/MigrationsProvider'
]

Setup Database

Setup database untuk keperluan local development, dalam kasus ini saya menggunakan database sqlite

Jalankan perintah berikut ini

npm install sqlite3 --save-dev

Kemudian, edit berkas .env dan tambahkan baris berikut ini

DB_CONNECTION=sqlite

Buat Model dan Migration

Buat model dengan adonis cli

adonis make:model Post

Lalu buat migration untuk membuat tabel di database

adonis make:migration post

Edit berkas migration yang berada di folder database/migrations/xxxxxxxxx_post_schema.js

Tambahkan baris berikut ini,

table.string('title')
table.text('content')

Sehingga menjadi seperti ini

'use strict'

const Schema = use('Schema')

class PostSchema extends Schema {
  up () {
    this.create('posts', (table) => {
      table.increments()
      table.string('title')
      table.text('content')
      table.timestamps()
    })
  }

  down () {
    this.drop('posts')
  }
}

module.exports = PostSchema

Kemudian jalankan migration dengan perintah

adonis migration:run

Repl

Laravel punya perintah artisan tinker untuk mengakses consolenya, adonis punya repl dengan fungsi serupa

adonis repl

Setelah masuk console, coba membuat post baru

> Post = use('App/Models/Post')
> await Post.create({title:'Hello Adonis',content:'This is first post'})
> await Post.find(1)

Routing

Setelah kita berhasil membuat Model, kita lanjutkan membuat route, edit berkas start/routes.js tambahkan baris berikut ini

Route.get('/post', 'PostController.index')
Route.get('/post/:id', 'PostController.detail')

Controller

Setelah membuat route yang kita arahkan ke controller, kita lanjutkan membuat controllernya

adonis make:controller PostController

Kemudian edit berkas controller menjadi seperti berikut ini

'use strict'

const Post = use('App/Models/Post')

class PostController {

    async index() {
        let posts = await Post.all()
        return posts
    }

    async detail({params}) {
        let post = await Post.find(params.id)

        return post
    }

}

module.exports = PostController

Yay

Sebelum kita coba di browser, mari kita check terlebih dahulu route yang kita buat dengan perintah

adonis route:list

# Output

┌───────────┬──────────┬───────────────────────┬────────────┬───────────┬────────┐
│ Route     │ Verb(s)  │ Handler               │ Middleware │ Name      │ Domain │
├───────────┼──────────┼───────────────────────┼────────────┼───────────┼────────┤
│ /         │ HEAD,GET │ Closure               │            │ /         │        │
├───────────┼──────────┼───────────────────────┼────────────┼───────────┼────────┤
│ /post     │ HEAD,GET │ PostController.index  │            │ /post     │        │
├───────────┼──────────┼───────────────────────┼────────────┼───────────┼────────┤
│ /post/:id │ HEAD,GET │ PostController.detail │            │ /post/:id │        │
└───────────┴──────────┴───────────────────────┴────────────┴───────────┴────────┘

Sekarang kita coba membuka di browser,

Next

Selanjutnya apa lagi yang harus dipelajari? Masih banyak fitur fitur adonis 4.0 yang dapat dicoba, sampai jumpa di tulisan selanjutnya sambil menunggu dokumentasi resmi adonis 4.0 dirilis.