Node.js ã® ActiveRecord ã©ã¤ãã©ãª Knex.jsã使ã
仿¥ã®ç¥è¦ã§ããã
Node.js ããActiveRecordãç¨ãã¦RDBMSã«ã¢ã¯ã»ã¹ããã«è¾ºãã knex.jsã便å©ã§ããã
var knex = require('knex')({ client: 'mysql', connection: { host : '127.0.0.1', user : 'your_database_user', password : 'your_database_password', database : 'myapp_test' }, pool: { min: 0, max: 7 } }); knex .select('*') .from('test') .where('id', id) .then(function(rows) { console.log(rows); }) .catch(function(err) { console.log(err); });
éã«ãµã³ãã«æ¸ãããã©ãã³ãã¯ã·ã§ã³ãã¼ãªã³ã°ãknexå´ã§ãã£ã¦ãããã®ãè¯ãã ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯callbackã§ãPromiseã§ãé¸ã¹ã(ä¸ã®ãµã³ãã«ã¯Promiseã§æ¸ãã¦ã)
selectã2åçºè¡ããã¨ãã¨ã
javascriptã®éåæã«æ £ãã¦ããªãã¨ãããã£ã¦ãã¾ã失æã ãã 1åç®ã®select ã®çµæãåãã¦2åç®ã®select ãçºè¡ããã¨ãã
var user_id; knex .select('user_id') .from('user') .where('id', id) .then(function(rows) { user_id = rows[0].user_id; }) .catch(function(err) { console.log(err); }); knex .select('*') .from('detail') .where('user_id', user_id) .then(function(rows) { console.log(rows); }) .catch(function(err) { console.log(err); });
user_id ãåå¾ãã¦detail ãã¼ãã«ãããã¼ã¿ãå¼ãã³ã¼ãã ããä¸è¨ã®ã³ã¼ãã¯ãã¾ãåããªãã 2ã¤ã®select æãéåæã«å®è¡ãããã®ã§ãuser_id ãåå¾ãã¦ãã detail ã« select ãããä¿è¨¼ã¯ãªãã
次ã®ããã«1ã¤ãã®selectæã®ã³ã¼ã«ããã¯ã®ä¸ã§2ã¤ãã®selectæãå¼ã¹ã° selectæã®çºè¡é çªãä¿è¨¼ãããã
var user_id; knex .select('user_id') .from('user') .where('id', id) .then(function(rows) { user_id = rows[0].user_id; knex .select('*') .from('detail') .where('user_id', user_id) .then(function(rows) { console.log(rows); }) .catch(function(err) { console.log(err); }); }) .catch(function(err) { console.log(err); });
ã³ã¼ã«ããã¯ããã¹ãããã®ã§é常ã«ã³ã¼ããèªã¿ã«ãããselectæãçºè¡ãããã³ã« ãã¹ãããªãã¨ãããªãã®ãï¼Promise ã¯ãããã callbackå°çã解決ããããã®ææ®µã ã
var user_id; knex .select('user_id') .from('user') .where('id', id) .then(function(rows) { user_id = rows[0].user_id; return knex .select('*') .from('detail') .where('user_id', user_id) }) .then(function(rows) { console.log(rows); }) .catch(function(err) { console.log(err); });
1ã¤ãã®then ã§ user ãã¼ãã«ã¸ã®selectãå®è¡ããã2ã¤ãã®then ã§ detail ãã¼ãã«ã¸ã®select ãå®è¡ãããã 両è ã®select æã®ã©ã¡ããã§ã¨ã©ã¼ãçºçããã°æå¾ã®catch ã§ã¨ã©ã¼ãæ¾ãããã ããããããã
DBã¸ã®æ¥ç¶ãã·ã³ã°ã«ãã³ã§ä¿æããã
è¤æ°ã®ã©ã¤ãã©ãªããknexãå¼ã¶å ´åãåã©ã¤ãã©ãªã§knexãåæåãã㨠ãã®æã ãDBã¸ã®ã³ãã¯ã·ã§ã³ãå¢ããã®ã§ãknex ã¤ã³ã¹ã¿ã³ã¹ã1ã¤ã«ä¿æãã¤ã¤ã è¤æ°ã®ã©ã¤ãã©ãªããknex ã使ç¨ãããã ãã®ãããªå ´åãã·ã³ã°ã«ãã³ãªã¯ã©ã¹ãä½ãå¿ è¦ãããã
Node.js ã® require ã®ä»çµã¿ã¯ã·ã³ã°ã«ãã³ãé常ã«ä½ããããã
// knex-singleton.js var knex = require('knex')({ client: 'mysql', connection: { host : '127.0.0.1', user : 'your_database_user', password : 'your_database_password', database : 'myapp_test' }, pool: { min: 0, max: 7 } }); module.exports = knex;
ãã®ãããªã¢ã¸ã¥ã¼ã«ãä½ã£ã¦ãããåã©ã¤ãã©ãªãã
var knex = require('./knex-singleton'); knex.select('*').from('user').then(function(rows){ console.log(rows); });
ãããªæãã§ä½¿ãããknex-singleton ãä½åå¼ã³åºããããããknex ã¤ã³ã¹ã¿ã³ã¹ã¯å¸¸ã«1ã¤ã«ãªãã