본문 바로가기

개발/Node.js

[Node.js] express 사용하기

1. 서론

node.js를 서버로 사용하는 경우 가장 표준으로 인식되는 express.js에 대해 알아보도록 하자. 사실 크게 어려운 부분은 없으며, Restful API를 개발하기에 매우 간편하다.

2. 환경 설정

기본 전제 사항
당연히 node.js는 설치돼있다고 가정한다.
혹시 설치하지 않은 분은 여기를 클릭해서 설치하세요.

우선 폴더를 하나 만들어 node.js 개발 환경을 구축하도록 하자.

# 폴더 생성 및 열기
mkdir express_practice
cd express_practice

# package.json 초기화
npm init -y

# http, express 모듈 설치
npm install http express

3. Hello world! 출력하기

가장 간단한 Hello world를 출력하는 코드를 작성해보자.

// helloworld.js 파일

const express = require('express')
const http = require('http')
const app = express()
const server = http.createServer(app)
const PORT = 8080

app.get('/', (req, res) => {
	res.send('Hello world')
});

server.listen(PORT, () => {
	console.log(`Server running on http://localhost:${PORT}`);
});

실행 후 브라우저 혹은 postman을 통해 http://localhost:8080으로 접속해보자.

node helloworld.js

 

4. Restful API 구현

간단한 Rest API를 구현해보자.

구현에 앞서 post 메소드에서 사용하기 위한 body-parser 모듈을 설치해야 한다.

npm install body-parser

 

아래의 코드는 DB를 사용하지 않고 메모리 위에서만 user의 계정을 CRUD 할 수 있는 코드이다. Restful API에서 get은 조회, post는 등록, put은 수정, delete는 삭제의 용도로 사용해서 같은 path에 대한 요청이더라도 request method에 따라 다르게 사용할 수 있다는 점을 알아야 한다.

이제 각각의 request method에 따른 실행을 포스트맨을 통해서 확인해보자.

// rest.js 파일

const express = require("express");
const http = require("http");
const bodyParser = require("body-parser");
const app = express();

app.use(bodyParser.urlencoded({ extended: false }));

const server = http.createServer(app);
const PORT = 8080;

let users = [
    {
        id: "hello",
        password: "1234",
    },
    {
        id: "world",
        password: "1234",
    },
];

const findUserIndex = (id) => {
    let index = -1;
    let len = users.length;

    for (let i = 0; i < len; i++) {
        if (users[i].id === id) {
            index = i;
            break;
        }
    }

    return index;
};

const register = (id, password) => {
    let index = findUserIndex(id);
    if (index !== -1) return false;

    users.push({ id, password });
    return true;
};

const login = (id, password) => {
    let index = findUserIndex(id);
    if (index === -1) return false;

    if (users[index].id === id && users[index].password === password)
        return true;

    return false;
};

const changePassword = (id, password) => {
    let index = findUserIndex(id);
    if (index === -1) return false;

    users[index].password = password;
    return true;
};

const deleteUser = (id) => {
    let index = findUserIndex(id);
    if (index === -1) return false;

    users.splice(index, 1);
    return true;
};

app.post("/", (req, res) => {
    let id = req.body.id;
    let password = req.body.password;

    if (!register(id, password)) return res.status(401).send("duplicate id");
    res.send(`success to register ${id}'s account`);
});

app.get("/:id", (req, res) => {
    let id = req.params.id;

    if (findUserIndex(id) === -1) return res.status(401).send("invalid id");

    res.send(`Hello world ${id}`);
});

app.put("/:id", (req, res) => {
    let id = req.params.id;
    let password = req.body.password;

    if (!changePassword(id, password))
        return res.status(401).send("password change fail");
    res.send(`success to change ${id}'s password`);
});

app.delete("/:id", (req, res) => {
    let id = req.params.id;

    if (!deleteUser(id)) return res.status(401).send("delete fail");
    res.send(`success to delete ${id}'s account`);
});

app.post("/login", (req, res) => {
    let id = req.body.id;
    let password = req.body.password;

    if (!login(id, password)) return res.status(401).send("login fail");

    res.send("hello " + id);
});

server.listen(PORT, () => {
    console.log(`Server running on http://localhost:${PORT}`);
});

[참고]

expressjs.com/

 

Express - Node.js web application framework

Fast, unopinionated, minimalist web framework for Node.js $ npm install express --save

expressjs.com

 

'개발 > Node.js' 카테고리의 다른 글

[Node.js] express cors 사용하기  (0) 2021.01.29
[Node.js] mysql을 async/await로 처리하기  (0) 2021.01.29
[Node.js] nodemailer 사용하기  (0) 2021.01.29
[Node.js] moment 사용하기  (0) 2021.01.27
[Node.js] express router 사용하기  (0) 2021.01.27