Node.js SQL Query 문을 XML로 관리하기
"Node.js SQL Query 문을 XML로 관리하기"
자바스크립트에 SQL 쿼리문을 사용할때 한줄 이상인 경우 사용하기가 불편해진다.
그부분을 해소하기 위한 방법을 소개한다.
DBMS 는 MySQL 을 사용하였고, Node.js 프레임워크 Express 를 이용하여 개발하였다.
설치및 설명은 생략하고 소스만 설명하도록 한다. 소스는 어려운 부분이 없으므로 이해하기는 쉬울 것이다.
MySQL 모듈을 설치한다.
> npm i -g mysql
XML 파서를 설치하자.
> npm i -g xml-digester
xml-digester 모듈은 xml 결과를 json 으로 리턴해주며, 사용법도 간단하여 선택하게 되었다.
index.js 구동시키면 되고, 더 많은 쿼리문은 xml 에 노드 네임을 추가하면 되고 where 절을 구분을 주려면 노드를 좀더 세분화하면 될 것이다.
index.js 소스
var http = require('http'); var express = require('express'); var app = express(); app.use(app.router); http.createServer(app).listen(52271, function() { console.log('Start Server localhost:52271'); console.log(__filename); console.log(__dirname); }); var modules = require('./module.js'); app.get('/searchdata', modules._searchdata);
module.js 소스
var util = require('util'); var fs = require('fs'); var xml_digester = require("xml-digester"); var digester = xml_digester.XmlDigester({}); var mysql = require('mysql'); var db = mysql.createConnection({ user : '계정', password : '암호', database : '데이터베이스명' }); fs.readFile(__dirname + '/query.xml','utf8', function(error, data) { if (error) { console.log(error); } else { digester.digest(data, function(error, result) { if (error) { console.log(error); } else { global.searchdata_query = result.query.searchdata; } }); } }); exports._searchdata = function(req , res) { var limit = req.param("limit"); var service = req.param("service"); var query = util.format( global.searchdata_query , service , limit ); db.query(query, function (error, result, field) { if (error) { console.log("오류발생"); res.writeHead(500); res.end(); } else { res.json(result); } }); };
query.xml 소스
<?xml version="1.0" encoding="UTF-8" ?> <query> <searchdata> SELECT * FROM SEARCH_DATA WHERE service = '%s' AND is_used = 'Y' ORDER BY listorder LIMIT %s </searchdata> </query>