WebEngine

だらだらと綴る技術系メモ

Node.jsでSQLite3を使ってみる

環境

  • Ubuntu16.04
  • Node.js v7.7.1
  • npm 4.1.2


SQLite3をnpmでインストール

node.jsはサーバサイドでjavascriptを扱えるようにしたもの。当然、データベースも扱うことが できます。
今回はSQLiteというデータベースを使ってみます。ほかの選択肢としてはmongoDBなんかがあるみたいですね。

SQLiteはnpmを使ってインストールすることができます。

npm install sqlite3

実行時のディレクトリにnode_modulesというディレクトリができて、さらになかにsqlite3というディレクトリ が入ったはずです。


データを挿入する

SQLiteを直接立ち上げて、コマンドでテーブル定義などを行っても良いですが、今回は sqlite-insert.jsというスクリプトファイルを作成し、それを実行する過程でテーブル 定義などを行いつつ、データも挿入することにします。

var sqlite = require('sqlite3').verbose();                                          
var db = new sqlite.Database('test.sqlite');

db.serialize(function() {

  // テーブルがなければ作成
  db.run('CREATE TABLE IF NOT EXISTS students(name TEXT, age INT)');
 
  // プリペアードステートメントでデータ挿入
  var stmt = db.prepare('INSERT INTO students VALUES(?,?)');
  stmt.run(["Tanaka", 12]);
  stmt.run(["Sato", 13]);
  stmt.run(["Nakamura", 15]);
  stmt.finalize();

 });

db.close();

studentsテーブルは名前と年齢を管理するテーブルです。本当はIDなんかをつけた方が 良いのですが、今回はテストなので省略します。
実行はnode sqlite-insert.jsでできます。

プリペアードステートメントについては、以前MySQLで書いた記事があるので、そちらを参考にしてみてください。


データを取得する

つづいて、データベースからデータを取得するスクリプトを書いてみます。
ファイル名はsqlite-fetch.jsとでもしておきましょう。

var sqlite = require('sqlite3').verbose();                                          
var db = new sqlite.Database('test.sqlite');
 
db.serialize(function() {

  db.each("SELECT * FROM students", function(err, row) {
    console.log(row.name + ":" + row.age);
  });

});

db.close();

node sqlite-fetch.jsで実行します。
見ての通り、ターミナルにデータを表示するだけです。取得の際コールバック関数を 使っているのがnodeっぽいですよね。

いつのまにかtest.sqliteというファイルができているかと思いますが、そこに挿入した データが入っています。


参考

Expressを使ってみる

Expressってなに

Node.jsのウェブアプリケーションフレームワークです。Node.jsのフレームワークKoaRailsライクなSailsなんかがありますが、おそらくExpressがもっとも有名ではないかと 思います。


準備

  • 環境:macOS Sierra10.12.3

とりあえず本家サイトのインストール手順にしたがって環境を整えます。

mkdir express_test
cd express_test
npm init

express_testというディレクトリを作成、そこへ移動。npm initpackage.jsonというファイルを つくります。このコマンドを実行すると、いろいろ質問されますが、一つの質問を除いては、ただリターンキー(エンターキー) を押していくだけで良いです。
例外の質問とは

entry point: (index.js)

という項目です。
ここでは、メインのファイル名を入力します。今回はapp.jsとしました。
上手くpackage.jsonが作成されれば、次のコマンドでExpressをインストールします。

npm install express --save

グローバルでインストールしても良かったのですが、動かなかったときが怖いので、express_testディレクトリ内 にのみ入れました。

ハローワールド

メインファイルであるapp.jsを作成し、次のように書きます。

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('Hello, Express!!')
})

app.listen(3000, function () {
  console.log('Listening on port 3000!')
})

作成したら、ターミナルで

node app.js

と実行します。

ブラウザのURL欄にhttp://localhost:3000/と打ち込んで Hello, Express!!と出力されれば成功です。

参考

MacにNode.jsをインストールする

前提条件

  • 2017.2.19現在の情報
  • homebrewインストール済み
  • 現在node.jsが入っていない
  • 黒い画面を操作できる

手法

node.jsをインストールする方法はいろいろあるのですが、今回はnodebrew というものを使います。nodebrewでは複数のnode.jsを切り替えたりして 使うことができます。Rubyのrbenvに近い感じです。node.jsは開発が盛んに行われているので、急な仕様変更 にも対応できるように注意する必要があります。

本題

とりあえずnodebrewをインストールします。

brew install nodebrew

入ったか確認するには、nodebrew -vwhich nodebrewと 入力すれば良いです。

nodebrewが入ったら、次はnode.jsをインストールしていきます。
インストールできるnode.jsは

nodebrew ls-remote

で確認できます。

今回は最新版をインストールしたいと思います。
最新版をインストールするには

nodebrew install-binary latest

と打ち込めば良いです。
特定のバージョンのnode.jsをインストールしたい場合はlatestの部分を v7.1.0のようにすれば良いです。

ちなみに、僕の場合はインストールの際、このようなエラーが出ました。

Fetching: https://nodejs.org/dist/v7.5.0/node-v7.5.0-darwin-x64.tar.gz
Warning: Failed to create the file
Warning: /Users/home/.nodebrew/src/v7.5.0/node-v7.5.0-darwin-x64.tar.gz: No
Warning: such file or directory
                                                                           0.0%
curl: (23) Failed writing body (0 != 941)

参考にさせていただいたサイトに対処法がのっていたので、そのまま採用させていただきました。 こういうのは非常にありがたいですね。(リンクは下にあります)
このようにディレクトリを作成した結果、上手くいきました。

mkdir -p ~/.nodebrew/src

nodebrewに入れたnode.jsのバージョンを確認するには

nodebrew list

と入力します。

下の方がcurrent: noneとなっているはずです。これは、使用するnode.js が選択されていない状態を指します。

nodebrew use  v7.5.0

とすることで使用するnode.jsのバージョンを指定することができます。もう一度nodebrew listと 入力すると、current: noneだった箇所が指定したバージョンになっているはずです。

最後にパスを通します。

echo 'export PATH=$PATH:/Users/user_name/.nodebrew/current/bin' >> ~/.bashrc

隠しファイルである.bashrcに追記を行っています。user_nameの部分は自分のユーザ名を入力しましょう。
本当に追記されたか確認したい場合は

tail -n1 .bashrc

とでも打って確認してみましょう。

ターミナルを起動しなおし、node -vで指定したバージョンが出力されればオーケイです。
なお、Node.jsを入れるとnpmもセットで入ります。
npm -vでバージョンを確認することができます。


2017.3.2追記

ターミナルの調子が悪かったのかどうなのか理由は不明ですが、ターミナルを起動しなおすだけではnodeのパス が通らない現象が起きました。
そのときは、source ~/.bashrcとコマンドを打ち、.bashrc自体を読みなおしてやれば、上手くパス が通りました。

ちなみに、自分の環境では.bash_profilesource ~/.bashrcと追記してあります。
.bash_profile を読み込むと.bashrcも読み込まれる設定というわけです。
なので、環境によっては、パスを通すときの.bashrc.bash_profileに読みかえてもらえてもらえれば、と 思います。


参考