akkey247
2/13/2017 - 1:16 PM

【Nodejs, Express, Sqlite3】DB登録・取得

【Nodejs, Express, Sqlite3】DB登録・取得

const sqlite3 = require('sqlite3').verbose()
const db = new sqlite3.Database(":memory:")

// テーブルを作成
db.run("CREATE TABLE TName (number INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)")

module.exports = {
  // 登録
  registName: (req, res) => {
    db.serialize(() => {
      // ログを出力
      console.log('登録: '+req.body.name)
      // クロスオリジン対策(ローカル動作時のみ使用)
      res.header("Access-Control-Allow-Origin", "*")
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
      // データを登録する
      const stmt = db.prepare("INSERT INTO TName(name) VALUES (?)")
      stmt.run(req.body.name)
      stmt.finalize()
      res.end()
    })
  },
  getName: (req, res) => {
    db.serialize(() => {
      // ログを出力
      console.log('取得: '+req.body.number)
      // クロスオリジン対策(ローカル動作時のみ使用)
      res.header("Access-Control-Allow-Origin", "*")
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
      // データを取得して送信する
      db.get('SELECT number, name FROM TName WHERE number = $number', { $number: req.body.number }, (err, row) => {
        res.end(row.name)
      })
    })
  }
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>DB登録・取得テスト</title>

  <script>
    function registName(name) {
      $.ajax({
        url: 'http://localhost:8080/regist-name',
        type: 'POST',
        data: {
          'name': name
        },
        dataType: 'text'
      }).done(function( data, textStatus, jqXHR ) {
        //成功
        console.log("成功:"+data)
      }).fail(function( jqXHR, textStatus, errorThrown) {
        //失敗
        console.log("失敗")
      }).always(function( jqXHR, textStatus) {
        //通信完了
        console.log("通信完了")
      })
    }

    function getName(number) {
      $.ajax({
        url: 'http://localhost:8080/get-name',
        type: 'POST',
        data: {
          'number': number
        },
        dataType: 'text'
      }).done(function( data, textStatus, jqXHR ) {
        //成功
        console.log("成功:"+data)
      }).fail(function( jqXHR, textStatus, errorThrown) {
        //失敗
        console.log("失敗")
      }).always(function( jqXHR, textStatus) {
        //通信完了
        console.log("通信完了")
      });
    }
  </script>
</head>
<body>
  <!-- データ登録 -->
  <input type="text" id="name" />
  <button onclick="registName($('#name').val())">RegistName</button><br />
  <!-- データ取得 -->
  <input type="text" id="number" />
  <button onclick="getName($('#number').val())">GetName</button>
  <!-- jQuery -->
  <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
</body>
</html>
"use strict"

const express = require('express')
const app = express()
const bodyParser = require('body-parser')

// 自作DB接続モジュール読み込み
const dbConn = require('./db-connect')

// bodyParserの設定
app.use(bodyParser.urlencoded({
    extended: true
}))
app.use(bodyParser.json())

app.use(express.static('public'))

// 8080ポートで待ち受け
app.listen(8080)

// データ登録
app.post('/regist-name', dbConn.registName)
// データ取得
app.post('/get-name', dbConn.getName)
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.16.1",
    "express": "^4.14.1",
    "sqlite3": "^3.1.8"
  }
}