LoginSignup
23
26

More than 5 years have passed since last update.

Node.jsでWebAPI作成(Express + SQLite3)

Posted at

前回までの記事で環境の整備を行いました
CentOS7.2にNode.js環境を構築する
Node.js+Express経由でSQLite3にデータ登録する

今回は、WebAPIを作成して、以下の動きを実現します。
「リクエスト→Node.js→SQLite3→Node.js→レスポンス」

バージョン確認と、事前作業

バージョンの確認と、expressコマンドを利用可能にします

[am@Alnilam app]$ node -v
v4.4.2
[root@Alnilam ~]$ npm install -g express-generator 
[am@Alnilam app]$ express -V
4.13.1

Node.jsでAPIを作成する

expressコマンドで、アプリの雛形を作成する
コマンドで作成する。frenjyは適当にキーボードを叩いた文字列です。

[am@Alnilam ~]$ express frenjy
   create : frenjy
   create : frenjy/package.json
   create : frenjy/app.js
   create : frenjy/public
   create : frenjy/public/javascripts
   create : frenjy/public/images
   create : frenjy/public/stylesheets
   create : frenjy/public/stylesheets/style.css
   create : frenjy/routes
   create : frenjy/routes/index.js
   create : frenjy/routes/users.js
   create : frenjy/views
   create : frenjy/views/index.jade
   create : frenjy/views/layout.jade
   create : frenjy/views/error.jade
   create : frenjy/bin
   create : frenjy/bin/www

   install dependencies:
     $ cd frenjy && npm install

   run the app:
     $ DEBUG=frenjy:* npm start

自動生成したアプリにモジュールを追加して起動する
他の言語でいう、ライブラリ・パッケージの管理に当たるものらしい。モジュールの設定はアプリ直下の「package.json」に書いています。

[am@Alnilam ~]$ cd frenjy/
[am@Alnilam frenjy]$ npm install
[am@Alnilam frenjy]$ npm start
#開発時は、アクセス時に最新を取り直してほしいので、以下オプション追加
[am@Alnilam frenjy]$ npm start -g node-dev

ブラウザでアクセスする
test.png
アプリのテンプレート作成、起動が確認できました。続いてAPIを作成します。

作成したいAPIの情報(仕様、テーブル)

主なAPIの仕様は以下の通り
・ユーザテーブルに登録されたレコード全件をJSONの形で取得
・HTTPメソッド:GET

このAPIでアクセスするテーブル

sqlite> .schema user
CREATE TABLE user (
    id          INTEGER NOT NULL PRIMARY KEY,
    name        TEXT    NOT NULL,
    description TEXT
);

APIの作成

実際にAPIを作成していきます

APIの記述
Expressの恩恵や共通化の概念をほぼ無視して、まずAPIを記述

/home/am/frenjy/server.js
var express    = require('express');
var app        = express();
var bodyParser = require('body-parser');
var sqlite3    = require('sqlite3')

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var port = process.env.PORT || 3000;
var router = express.Router();

app.get('/', function(req, res) {
  var db = new sqlite3.Database('sample');
  db.serialize(function() {
    db.all('SELECT id,name FROM USER', function(err, rows) {
        res.json(rows);
    });
  });
  db.close();
});
app.listen(port);

レスポンス

[
  {"id":1,"name":"name1"},
  {"id":2,"name":"name2"}
]

最近のフレームワークでは、上のようにres.json()という書き方をするだけで、jsonの形式に整形してくれて凄く楽になりました。当然ですが、フレームワークが請け負ってくれている処理はきちんと把握しなければと思います。今回は、Node.jsからDBを参照して、jsonの文字列を返すAPIを作成しました。今後は、DB接続部分の共通化や、DI整形などきちんと整備したいと存じます。

23
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
26