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のフレームワークはKoaや RailsライクなSailsなんかがありますが、おそらくExpressがもっとも有名ではないかと 思います。
準備
- 環境:macOS Sierra10.12.3
とりあえず本家サイトのインストール手順にしたがって環境を整えます。
mkdir express_test cd express_test npm init
express_test
というディレクトリを作成、そこへ移動。npm init
でpackage.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 -v
かwhich 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_profile
にsource ~/.bashrc
と追記してあります。
.bash_profile
を読み込むと.bashrc
も読み込まれる設定というわけです。
なので、環境によっては、パスを通すときの.bashrc
は.bash_profile
に読みかえてもらえてもらえれば、と
思います。