티스토리 뷰

백앤드/NodeJs

모듈화

수달찌 2021. 3. 27. 22:36

목차

 

 

음.. 개인적으로 깔끔하게 쓰는걸 남들보다 더 좋아한다.

뭔가 절제된 느낌이 간단한 코드에서도 격을 나타내주는 느낌이랄까

 

좀 더 간편하게, 하지만 따라하기 힘든 그런느낌이 좋다.

모듈화

 

프로그램 볼륨이 커져서 여러가지 함수가 생길 시,

파일을 나눠주는게 좋다.

특히 CRUD(post, get, delete, put)에서 더 느껴지는게,

CRUD 함수들이 전체적인 흐름을 가진게 아니라,

하나하나 필요할때 실행되는 구조라

함수가 어디있는지 찾을려면 흐름으로 찾는다기보다 그냥 하나하나 찾게된다.

게다가 코드도 함수하나하나에  작동결과에 따른(양호, 에러) 코드도 넣어줘야하기에

하나하나가 기본적인 코드 양이 많다.

원본

const express = require('express');
const cors = require('cors');
var request = require('request');

var app = express();
app.use(cors());

app.post('/sign-up', (req, res) => {
  var new_user = new Users(req.body);

  new_user.save((err) => {
    if (err) return res.status(500).json({ message: '저장 실패!' });
    else {
      count++;
    return res.status(200).json({ message: '저장 성공!', data: new_user });
    }
  });
});

app.post('/Log-in', (req, res) => {
  Users.findOne({ id: req.body.id, password: req.body.password }, (err, user) => {
    if (err) return res.status(500).json({ message: '에러!' });
    else if (user) return res.status(200).json({ message: '유저 찾음!', data: user });
    else {
      count++;
      return res.status(404).json({ message: '유저 없음!' });
    }
  });
});

app.get('/shopping', (req, res) => {
  var api_url = 'https://openapi.naver.com/v1/search/shop.json?query=' + encodeURI("");
  var options = {
    url: api_url,
    headers: {'X-Naver-Client-Id':client_id, 'X-Naver-Client-Secret': client_secret}
  };
  request.get(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      res.writeHead(200, {'Content-Type': 'text/json;charset=utf-8'});
      res.end(body);
    } else {
      res.status(response.statusCode).end();
      console.log('error = ' + response.statusCode);
    }
  });
});


app.listen(3002, () => console.log('Server On 3002'));

대충 3개만 넣었는데 양이 방대하다...

자 이제 이 코드를 보기 좋게 나눠보자

모듈화

일단 나눌 코드의 js파일을 만들어주자

 

 유저 계정에 대한 코드를 넣을(postUser.js)와

메인 데이터 네이버 Api를 불러올(GetNaverApi.js)를 만들었다.

 

const express = require('express');
const cors = require('cors');
var request = require('request');

var app = express();
app.use(cors());

app.post('/sign-up', signUp);

app.post('/log-in', logIn);

app.get('/shopping', getNaverShop);


app.listen(3002, () => console.log('Server On 3002'));



function signUp (req, res) {
  var new_user = new Users(req.body);

  new_user.save((err) => {
    if (err) return res.status(500).json({ message: '저장 실패!' });
    else {
      count++;
    return res.status(200).json({ message: '저장 성공!', data: new_user });
    }
  });
}

function logIn (req, res) {
  Users.findOne({ id: req.body.id, password: req.body.password }, (err, user) => {
    if (err) return res.status(500).json({ message: '에러!' });
    else if (user) return res.status(200).json({ message: '유저 찾음!', data: user });
    else {
      count++;
      return res.status(404).json({ message: '유저 없음!' });
    }
  });
}

function getNaverShop (req, res) {
  var api_url = 'https://openapi.naver.com/v1/search/shop.json?query=' + encodeURI("");
  var options = {
    url: api_url,
    headers: {'X-Naver-Client-Id':client_id, 'X-Naver-Client-Secret': client_secret}
  };
  request.get(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      res.writeHead(200, {'Content-Type': 'text/json;charset=utf-8'});
      res.end(body);
    } else {
      res.status(response.statusCode).end();
      console.log('error = ' + response.statusCode);
    }
  });
}

 

모듈화 할 함수를 밑으로 뺐다.

원래는 바로 해당파일에 옮길테지만

포스트를 읽는입장에서는 과정을 이해하기 어려울 것 같아 과정을 늘렸다.

 

밑으로 뺀 함수를 해당파일로 옮겨주자.

const express = require('express');

var app = express();

exports.signUp = function (req, res) {
  var new_user = new Users(req.body);

  new_user.save((err) => {
    if (err) return res.status(500).json({ message: '저장 실패!' });
    else {
      count++;
    return res.status(200).json({ message: '저장 성공!', data: new_user });
    }
  });
}

exports.logIn = function (req, res) {
  Users.findOne({ id: req.body.id, password: req.body.password }, (err, user) => {
    if (err) return res.status(500).json({ message: '에러!' });
    else if (user) return res.status(200).json({ message: '유저 찾음!', data: user });
    else {
      count++;
      return res.status(404).json({ message: '유저 없음!' });
    }
  });
}

exports.함수이름 = 함수() {} 형식으로 적으면 된다.

그후, index.js로 돌아가 모듈을 불러와주자

 

const express = require('express');
const cors = require('cors');

const GetNaverApi = require('./GetNaverApi');
const Get_UTCI = require('./postUser');

var app = express();
app.use(cors());

app.post('/sign-up', postUser.signUp);
app.post('/log-in', postUser.logIn);

app.get('/shopping', GetNaverApi.getShop);


app.listen(3002, () => console.log('Server On 3002'));

request로 모듈을 불러 온 뒤,

해당모듈의 exports 요소 중 꺼내쓰면 된다.

 

이제 index.js를 보자마자 서버가 어떤 기능을 가지고 있는지

알 수 있다.

'백앤드 > NodeJs' 카테고리의 다른 글

Res write / send / json  (0) 2021.03.21
Nodejs로 서버만들기  (0) 2021.03.09
Node.js란  (0) 2021.03.06
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함