반응형
반응형

Node.Js에서 사용할 Mysql ODM을 찾던 중, Sequelize라는 솔루션을 발견하여, 잘 써먹고 있던 도중

.fn('NOW') 함수를 이용하여, datetime 형태의 data를 insert할 경우 UTC 시간으로 입력이 되는 이슈를 발견하였다.


참고 : sequelize link 클릭 시 새창 (http://docs.sequelizejs.com/en/v3/)


이런 경우 sequelize의 constructor를 호출하는 과정에서 아래와 같이 timezone 옵션을 넣어, 한국 시간 (UTC+09:00) 으로 변경을 할 수 있다.


자체적으로 connection pooling 기능도 제공을 하는데, 그것도 constructor의 옵션 중 pool이라는 옵션으로 넣어주면 된다.

 var sequelize = new Sequelize('DB명', '계정', '비밀번호', {
    host: '127.0.0.1',
    dialect: 'mysql',
    timezone: '+09:00',
    pool: {
        max: 20,   // 최대 유지 connection 수
        min: 5,    // 최소 유지 connection 수
        idle: 60000 // connection을 몇ms까지 대기시킬 것인가 (이후엔 버려짐)
    }
});


반응형
,
반응형

윈도우에선 잘 되던 npm start가 linux로 옮기니 아래와 같은 에러가 발생하였다.

sh: 1: concurrent: Permission denied

npm ERR! Linux 3.13.0-32-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "start"
npm ERR! node v6.9.2
npm ERR! npm  v3.10.9
npm ERR! code ELIFECYCLE


권한이 없어서 발생하는 문제로 node_modules/.bin 폴더의 permission을 755로 바꿔주면 해결된다.


$ chmod 755 node_modules/.bin


반응형
,
반응형

Express의 경우 기본적으로 html view engine을 지원하지 않기 때문에,

html파일 로딩을 위해서는 file loading 후에 Content-Type을 변경하여 rendering해주어야 한다.

var fs = require('fs');
var path = require('path');
var express = require('express');
var app = express();

// npm으로 jquery나 angular등을 설치한 경우 node_modules에 들어있는 필요한 js, css 파일 등을 접근해야 하므로
// 아래 구문을 추가하여 direct로 접근할 수 있게끔 설정해준다.
app.use('/node_modules', express.static(path.join(__dirname, 'node_modules'))); 

app.get('/get_html', function(req, res) {
    fs.readFile('static/test.html', function(err, data) {
        if(err) {
            console.log(err);
        } else {
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.end(data);
        }
    });
});

반응형
,
반응형

Express설치는 매우 간단하기 때문에, 아래 링크를 참조해서 잘 깔면된다.

https://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm


Express가 설치되었다는 가정하에, 아래 코드 몇 줄이면 application/json 으로 통신이 가능한 웹 서버를 띄울 수가 있다.

var express = require('express');
var app = express();

var bodyParser = require('body-parser');
app.use(bodyParser.json());     // 이 부분이 Json Protocol을 지원하겠다는 의미

// POST API 등록
app.post('/test_json_api', function(req, res) {
    req.accepts('application/json');
    jsonBody = req.body;     // json parsing
    console.log(jsonBody);
});

// 8081 포트로 서버를 띄운다.
app.listen(8081, function() {
    console.log('server listening on port %s.', 8081);
});


반응형
,
반응형

간단한 서버에 DB연동 등을 하다보니, js파일이 무한정 길어지게 되어.. 지저분해서 찾아보게되었는데

module.exports라는 명령어를 사용하여, module형태로 만들어서 분리를 할 수가 있었다.


DB연동하는 부분이 길어졌으니, model.js라는 파일로 분리해서, 모듈을 만들어보았다.

아래처럼 module.exports.{함수명} 형태로 만들어주면 되며, 단순히 변수값을 return하는 경우에도 함수로 만들어줘야 하는 것 같다. (확실치 않음;;)

module.exports.Model1 = function() {
    var model = null;
    ...
    ...
    return model;
};


모듈을 만들었으니 사용법에 대해 알아보자.

방금 만들어준 파일을 require 구분으로 가져다 쓸 파일에 import 해준 뒤에, 함수를 호출해주면 된다.

require시에는 같은 경로에 파일이 있더라도 ./ 을 항상 넣어주는 것이 삽질을 줄일 수 있었던 것 같다.

var model = require(./model.js');
var model1 = model.Model1();
console.log(model1);


반응형
,
반응형