先日までに 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>