본문 바로가기

Node.js

Node.js로 Restful API Server 만들기 (2)

express-generator를 이용하면 빠른시간에 기본 템플릿을 만들고 http server를 구동하여 볼수 있습니다. 이제 원하는 restful API를 만들기 위해 Router라는 것을 정의해야 합니다.

 

entry 지점은 bin/www에 생성됩니다. 여기서는 http server를 구동하고 app.js를 binding합니다. 포트를 변경하거나 http대신 https로 교체할 수 있습니다.

var app = require('../app');
var debug = require('debug')('myapp:server');
var http = require('http'); // https로 변경할 수 있습니다.

/**
 * Get port from environment and store in Express.
 */

// http 리슨 포트를 변경합니다.
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

---------------- 이하 생략 ----------------------

 

generator에 의해 생성된 app.js코드입니다. 

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

기본적으로 2개의 Router가 생성되어 있습니다. 하나는 indexRouter로 서비스 기본 URL요청을 처리합니다.

핸들러코드의 경로는 ./routes/index로 지정되어 있습니다.   myapp/routes/index.js파일을 Import하는 것입니다.

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;
 

위와 같이 router를 선언하고 exports 해주면 됩니다.  기본 URL (/)에 대한 Handler함수가 정의 되어 있으며 res.render함수를 호출하여 html로 응답하고 있습니다.

 

사전 생성된 indexRouter를 참조하여 추가할 API를 생성해보도록 하겠습니다.

 

routers/test.js파일을 생성합니다.

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {

    let username = req.query.username;

    res.send(JSON.stringify({
        code : 200,
        yourname : username
    }));
});

module.exports = router;

HTTP Get Method는 url Parameter로 값을 전달합니다.  express는 req.query에 해당 파라메터를 Parsing하여 전달합니다.

즉 아래와 같이 호출하면 서버는 req.query.username으로 간단하게 참조할 수 있습니다.

 

http://localhost:3000/test?username=test

 

이제 app.js에 새로 생성한 Router를 추가합니다.

 

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var TestRouter = require('./routes/test');

var app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/test', TestRouter);

module.exports = app;

브라우져에서 테스트를 해보면 아래와 같이 JSON문이 표시됩니다.

 

브라우져에서 접속하여 JSON데이터를 수신

 

이런식으로 Router를 추가하여 필요한 Handler를 정의해서 사용하시면 됩니다.  3편에서는 보다 복잡한 예제들을 소개 하겠습니다.

 

읽어주셔서 감사합니다.