Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
26
Help us understand the problem. What is going on with this article?
@kaikusakari

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

More than 5 years have passed since last update.

前回までの記事で環境の整備を行いました
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整形などきちんと整備したいと存じます。

26
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kaikusakari
I'm noob.

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
26
Help us understand the problem. What is going on with this article?