先日までに vue.js に触れてみましたが、 サーバ側の処理も javascript(node.js)で試したくなりました。 (そうすれば、クライアント側もサーバ側も javascriptで統一できますからね)
そこで、node.js + express による mysql への接続を実装してみました。以下
試した感想
簡単な実装はできますが、javaやperl、pythonと比較すると、 node.jsはmoduleや日本語情報が、まだまだ少ないので、 現時点では、サーバ側の実装は、これまで通り、javaやperl、python を利用した方が良さそう。
という感じ
下準備
## ↓ express-generator とは spring boot のようなものと理解してます
$ sudo /usr/bin/npm install --global express-generator
## 上記により、/usr/bin/express が利用できますので
## projectを template engine=ejsで作成
$ /usr/bin/express --view=ejs node_exp_gen_mysql
create : node_exp_gen_mysql/
<略>
create : node_exp_gen_mysql/public/javascripts/
create : node_exp_gen_mysql/bin/www
change directory:
$ cd node_exp_gen_mysql
install dependencies:
$ npm install
run the app:
$ DEBUG=node-exp-gen-mysql:* npm start
## 上記により、 package.json が作成されていますので
## npm install により、package.json 内にある依存moduleをinstall
$ cd node_exp_gen_mysql
$ npm install
node-exp-gen-mysql@0.0.0 /home/end0tknr/tmp/node_exp_gen_mysql
├─┬ cookie-parser@1.4.4
: :
├── ejs@2.6.2
├─┬ express@4.16.4
│ ├─┬ accepts@1.3.7
: : :
## 試しにnpm startにより起動し、ブラウザでアクセス( http://cent76.a5.jp:3000/ )
## start というコマンドは package.json 内に定義されています。
$ npm start
## ctrl+cでサーバ停止
$ ^C
## mysql moduleのinstall
$ /home/end0tknr/tmp/node_exp_gen_mysql
$ npm install --save mysql
node-exp-gen-mysql@0.0.0 /home/end0tknr/tmp/node_exp_gen_mysql
└─┬ mysql@2.17.1
├── bignumber.js@7.2.1
├─┬ readable-stream@2.3.6
│ ├── core-util-is@1.0.2
│ ├── isarray@1.0.0
│ ├── process-nextick-args@2.0.1
│ ├── string_decoder@1.1.1
│ └── util-deprecate@1.0.2
└── sqlstring@2.3.1
実装したsrc (defaultからの変更分のみ)
routes/index.js
var express = require('express'); var router = express.Router(); var mysql = require('mysql'); var dbh = mysql.createConnection({ host : 'localhost', user : 'root', password : '', database : 'test_db' }); /* GET home page. */ router.get('/', function(req, res, next) { dbh.connect(); var sql = 'select tei_name,build_address from anken where tei_name like ? limit 5'; var render_data = { title: 'nodejs express mysql test', db_results: []}; dbh.query(sql, ['%鈴木%'], function (error, results, fields) { if (error) throw error; render_data['db_results'] = results; console.log(results); res.render('index', render_data); }); dbh.end(); }); module.exports = router;
views/index.ejs
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= title %></h1> <table> <tbody> <% for(var i in db_results) { %> <tr> <% var obj = db_results[i]; %> <th><%= obj.tei_name %></th> <td><%= obj.build_address %></td> </tr> <% } %> </tbody> </table> <p>Welcome to <%= title %></p> </body> </html>