参照APIを作ったので今回はTypeScriptでデータベースにアクセスして書き込みする機能を作ります。言語のコンセプトとしてKVSの方が相性が良いと思いますが今回はSQLiteをデータ保持に使います。
概要
- データ登録用APIを作成する
- データをSQliteに書き込む
APIのインターフェース
POST /regist
環境の整備
Macには元々SQliteが入ってるのでNodeのSQLiteパッケージをインストール
$ sqlite3 --version 3.32.3 $ npm install sqlite3
DB構築
$ sqlite3 testdb sqlite> create table item(id, name); sqlite> .schema item CREATE TABLE item(id, name); sqlite>
テストデータの投入
sqlite> insert into item values (1,'item1'); sqlite> insert into item values (2,'テスト2'); sqlite> select * from item; 1|item1 2|テスト2 sqlite>
プログラムの追加
登録内容の一覧を返す機能とPOSTリクエストをDBに登録する機能の2つを追加しました
import http, {IncomingMessage, ServerResponse} from 'http'; const sqlite3 = require("sqlite3"); type Item = { id: string name: string } const server = http.createServer((req: IncomingMessage, res: ServerResponse) => { res.writeHead(200, {'Content-Type' : 'application/json'}); switch (req.url) { case '/list': const db = new sqlite3.Database("./testdb"); db.all("select * from item", ( err:String, rows:Item[]) =>{ let output = ""; rows.forEach (item => { output += item.id + "/" + item.name + " " }); res.write(output); res.end(); }); break; case '/regist': var body = ''; req.on('data', function(chunk) { body += chunk; }); req.on('end', function() { const body_split = body.split('&'); const post_id = body_split[0].substring(3); const post_name = body_split[1].substring(5); const db = new sqlite3.Database("./testdb"); db.run("insert into item values(?,?)", post_id, post_name); }); res.write('registed'); res.end(); break; } }) server.listen(4000) ||<<