• xyz/app/Controllers/Http/Mgmt/AdminController.js 파일을 생성한다.
    > cd xyz
    xyz> adonis make:controller Mgmt\Admin
    'use strict'
     
    const Admin = use('App/Models/Admin')
     
    class AdminController {
     
      // 관리자 목록
      async index ({view}) {
        const admins = await Admin.all()
        return view.render('mgmt.admin.index', { admins: admins.toJSON() })
      }
    }
     
    module.exports = AdminController
  • xyz/resources/views/mgmt/base.edge 파일을 생성한다.
    <html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <title>Adonis Tutorial</title>
    </head>
    <body>
    @!section('content')
    </body>
    </html>
  • xyz/resources/views/mgmt/admin/index.edge 파일을 생성한다.
    @layout('mgmt.base')
     
    @section('content')
    <div class="container">
      <div class="page-header">
        <h1>Administrator (관리자)</h1>
      </div>
     
      <table class="table table-striped table-hover table-condensed">
      <tr>
        <th style="text-align: center">아이디</th>
        <th style="text-align: center">별명</th>
        <th style="text-align: center">수정/삭제</th>
      </tr>
      @each(admin in admins)
      <tr>
        <td style="text-align: center">{{ admin.userid }}</td>
        <td style="text-align: center">{{ admin.nick }}</td>
        <td style="text-align: center">
          <a href="/mgmt/admin/chg_passwd_form/{{ admin.id }}" class="btn btn-default btn-xs" data-toggle="modal" data-target="#myModal">비밀번호변경</a>
          <a href="/mgmt/admin/update_form/{{ admin.id }}" class="btn btn-default btn-xs" data-toggle="modal" data-target="#myModal">수정</a>
          <button onclick="delete_admin('/mgmt/admin/delete/{{ admin.id }}')" class="btn btn-default btn-xs">삭제</button>
        </td>
      </tr>
      @endeach
      </table>
    </div>
     
    <script>
    function delete_admin(url) {
        var result = confirm("관리자를 정말로 삭제하시겠습니까?");
        if( result == false ) return;
        location.href = url;
    }
    </script>
    @endsection
  • xyz/start/routes.js 에 다음을 추가한다.
    Route.group('mgmt', function () {
      Route.get('/admin', 'Mgmt/AdminController.index').as('mgmt_admin')
    }).prefix('/mgmt')



  • Admin 모델을 생성한다.
    $ adonis make:model Admin

    xyz/app/Models/Admin.js 파일이 생성된다.

  • 마이그레이션 생성하기
    $ adonis make:migration admins
    create: xyz/database\migrations\1507612187061_admins_schema.js
  • xyz/database\migrations\1507612187061_admins_schema.js 파일을 열어서 아래처럼 수정한다.
    'use strict'
     
    const Schema = use('Schema')
     
    class AdminsSchema extends Schema {
      up () {
        this.create('admins', (table) => {
          table.increments()
          table.string('userid').unique()
          table.string('password').notNullable()
          table.string('nick').unique()
        })
      }
     
      down () {
        this.drop('admins')
      }
    }
     
    module.exports = AdminsSchema
  • 마이그레이션을 실행하여 SQLite DB파일과 admin 테이블을 생성한다.
    $ cd xyz
    $ adonis migration:run

    이제, xyz/database/development.sqlite 파일이 생성되었다.

  • 다음과 같이 테이블이 생성된 것도 볼 수 있다.
    xyz\database> sqlite3 development.sqlite
    SQLite version 3.15.0 2016-10-14 10:20:30
    Enter ".help" for usage hints.
    sqlite> .schema
    CREATE TABLE "adonis_schema" ("id" integer not null primary key autoincrement, "name" varchar(255), "batch" integer, "migration_time" datetime default CURRENT_TIMESTAMP);
    CREATE TABLE "users" ("id" integer not null primary key autoincrement, "username" varchar(80) not null, "email" varchar(254) not null, "password" varchar(60) not null, "created_at" datetime, "updated_at" datetime);
    CREATE UNIQUE INDEX "users_username_unique" on "users" ("username");
    CREATE UNIQUE INDEX "users_email_unique" on "users" ("email");
    CREATE TABLE "tokens" ("id" integer not null primary key autoincrement, "user_id" integer, "token" varchar(40) not null, "is_revoked" boolean default '0', "created_at" datetime, "updated_at" datetime, foreign key("user_id") references "users"("id"));
    CREATE UNIQUE INDEX "tokens_token_unique" on "tokens" ("token");
    CREATE TABLE "admins" ("id" integer not null primary key autoincrement, "userid" varchar(255), "password" varchar(255) not null, "nick" varchar(255));
    CREATE UNIQUE INDEX "admins_userid_unique" on "admins" ("userid");
    CREATE UNIQUE INDEX "admins_nick_unique" on "admins" ("nick");
    sqlite> insert into admins(userid, password, nick) values('testid1', 'passwd1', 'nick1');
    sqlite> insert into admins(userid, password, nick) values('testid2', 'passwd2', 'nick2');
    sqlite> insert into admins(userid, password, nick) values('testid3', 'passwd3', 'nick3');
    sqlite> insert into admins(userid, password, nick) values('testid4', 'passwd4', 'nick4');
    sqlite> insert into admins(userid, password, nick) values('testid5', 'passwd5', 'nick5');
    sqlite> select * from admins;
    1|testid1|passwd1|nick1
    2|testid2|passwd2|nick2
    3|testid3|passwd3|nick3
    4|testid4|passwd4|nick4
    5|testid5|passwd5|nick5
    sqlite> .quit



  • 프로젝트 디렉토리 구조
    xyz
    ├── app
    │   └── Models
    ├── config
    ├── database
    │   └── migrations
    ├── public
    ├── resources
    │   └── views
    └── start
  • 첫페이지를 변경해보자. 우선 xyz/resources/views/welcome.edge 을 삭제하고 xyz/resources/views/index.edge 을 만든다.
    <html>
    <head>
    <title>My First HTML Page</title>
    </head>
    <body>
    <h1>My First HTML Page</h1>
    </body>
    </html>
  • Main 컨트롤러를 생성한다. (Http Request 선택)
    $ cd xyz
    $ adonis make:controller Main
    ? Generating a controller for ?
    > For Http Request (엔터를 입력한다!!!)
      For WebSocket Channel
     
    create  app\Controllers\Http\MainController.js

    그러면, xyz/app/Controllers/Http/MainController.js 파일이 생성된다.

  • xyz/app/Controllers/Http/MainController.js 파일을 아래와 같이 수정한다.
    'use strict'
     
    class MainController {
      index ({ view }) {
        return view.render('index')
      }
    }
     
    module.exports = MainController
  • xyz/start/routes.js 를 아래와 같이 작성한다.
    'use strict'
     
    const Route = use('Route')
     
    Route.get('/', 'MainController.index')
  • 다시 한번, 웹브라우저에서 http://localhost:3333 으로 접속해서 잘 나오는지 확인해봅니다.



  • OS는 취향대로 설치하세요. 그런데 왠만하면 Ubuntu Linux 를 설치해주세요. git 와 sqlite3 를 설치합니다.
  • Node 를 설치합니다.
  • @adonisjs/cli 를 설치합니다.
    $ npm i -g @adonisjs/cli
  • 새로운 프로젝트를 생성합니다. 프로젝트명은 xyz 로 임시로 정하였습니다.
    $ adonis new xyz
  • 새로 생성된 프로젝트로 실행해 봅니다.
    $ cd xyz
    $ npm i --save sqlite3
    $ adonis serve --dev
  • 웹브라우저에서 http://localhost:3333 으로 접속해 봅니다.


+ Recent posts