TIL 20 | Node.JS 기초 πŸ’¬

saneeeeeeee_YaΒ·2021λ…„ 7μ›” 13일
0

πŸ›Έ

λͺ©λ‘ 보기
20/25
post-thumbnail

μžλ°”μŠ€ν¬λ¦½νŠΈμ€ λΈŒλΌμš°μ € μ•ˆμ—μ„œ λŒμ•„κ°€λŠ” 언어이닀 λΈŒλΌμš°μ € λ°–μ—μ„œ 이것을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ Node.JS(λŸ°νƒ€μž„ ν™˜κ²½)이 ν•„μš”ν•˜λ‹€

Node.JS ꡬ쑰

μ‹±κΈ€ μ“°λ ˆλ“œ / 이벀트 루프


JSλŠ” 비동기 기반의 언어이닀 ν•˜λ‚˜μ˜ μ“°λ ˆλ“œλ‘œ μ—¬λŸ¬ Client의 μš”μ²­μ„ λ°›κ³  응닡을 ν•΄μ€€λ‹€

비동기 기반(Non-Blocking I/O)의 μ–Έμ–΄μ—¬μ„œ μ½œλ°±ν•¨μˆ˜μ™€ μ—λŸ¬κ°€ λ°œμƒν•  λ•Œ λΆˆλŸ¬μ˜€λŠ” ν•¨μˆ˜λ₯Ό 지정을 ν•΄μ€˜μ•Όν•œλ‹€

ν•˜λ‚˜μ˜ μ“°λ ˆλ“œλ‘œ μ—°μ‚°μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— λ³΅μž‘ν•œ μ—°μ‚°μ²˜λ¦¬κ°€ μžˆμ„ μ‹œ 어렀움에 μ§λ©΄ν•˜κ±°λ‚˜ μ—λŸ¬κ°€ λ°œμƒν•  μ‹œ μ„œλ²„κ°€ λ©ˆμΆ”λŠ” 단점이 μžˆλ‹€

Node.JS둜 μ„œλ²„ κ΅¬λ™ν•˜κΈ°

Express ν”„λ ˆμž„μ›Œν¬λ‘œ μ„œλ²„λ₯Ό ꡬ동할 수 μžˆλ‹€
morgan λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜μ—¬ 터미널에 였λ₯˜μ‚¬ν•­μ„ λ‚˜μ˜€λ„λ‘ ν•  수 μžˆλ‹€

const express = require("express");
const morgan  = require("morgan");


const app = express();

const port = process.env.PORT || 5000;
const host = process.env.HOST || "0.0.0.0";

app.listen({ port, host }),
    async () => {
        try {
            await console.log(
                `Server is running on port ${port}`
            );
        } catch (err) {
            await console.log(`${err}`);
        }
    };

Router / Controller / Model

Node.JS둜 효율적인 μš΄μ˜μ„ μœ„ν•˜μ—¬ 계측ꡬ쑰λ₯Ό λ‚˜λˆ„μ–΄μ•Όν•œλ‹€

Router둜 URl을 λ‚˜λˆ„κ³  Controller둜 λ‘œμ§μ„ κ΅¬μ„±ν•œλ‹€

./routes/index.js

const router     = require('express').Router();
const controller = require('./controllers')

router.get('/router', controller)
           
module.exports = router;           

app.js

const express = require("express");
const morgan  = require("morgan");

const Router = require("./routes");

const app = express();

const port = process.env.PORT || 5000;
const host = process.env.HOST || "0.0.0.0";

app.listen({ port, host }),
    async () => {
        try {
            await console.log(
                `Server is running on port ${port}`
            );
        } catch (err) {
            await console.log(`${err}`);
        }
    };

./controllers/index.js

module.exports = { async (req, res, next) => {
  return res.json({'Hi'})
}

Middleware

μš”μ²­κ³Ό μ‘λ‹΅μ‚¬μ΄μ—μ„œ μ²˜λ¦¬ν•˜λŠ” μΌμ’…μ˜ μ΅œμ†Œν•œ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ§Œλ“€μ–΄μ„œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€
Express.JSμ—μ„œ useν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ›ν•˜λŠ” 미듀웨어λ₯Ό 등둝할 수 μžˆλ‹€


app.use(express.urlencoded({ extended: false }));
// url μΏΌλ¦¬μŠ€νŠΈλ§μ„ parsing(req.body)

app.use(express.json());
// jsonμš”μ²­μ„ 받을 수 μžˆλ‹€

app.use(morgan("dev"));
// 였λ₯˜μ‚¬ν•­μ„ 터미널 내에 λ‚˜νƒ€λ‚΄κ²Œ ν•΄μ€€λ‹€

next

const express = require('express')

const app = express()

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

app.listen({ port, host }),
    async () => {
        try {
            await console.log(
                `Server is running on port ${port}`
            );
        } catch (err) {
            await console.log(`${err}`);
        }
    };

next ν•¨μˆ˜λŠ” λ‹€μŒ 콜백 ν•¨μˆ˜λ‘œ λ„˜μ–΄κ°ˆ 수 있게 도와쀀닀
next 내에 νŒŒλΌλ―Έν„°κ°€ μ‘΄μž¬ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€
nextλ₯Ό μ΄μš©ν•˜μ—¬ 미듀웨어λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€

ν™˜κ²½λ³€μˆ˜

.env

dotenvλ₯Ό μ΄μš©ν•˜μ—¬ 숨긴 파일(.env)에 ν™˜κ²½λ³€μˆ˜λ₯Ό μ €μž₯ν•˜μ—¬ λ“œλŸ¬λ‚˜μ§€ μ•Šκ²Œ ν•œλ‹€

require("dotenv").config();

// .env에 μ €μž₯λ˜μ–΄ μžˆλŠ” ν™˜κ²½λ³€μˆ˜λŠ” 
// process.env.{ν™˜κ²½λ³€μˆ˜}둜 뢈러올 수 μžˆλ‹€

Path

const path = require('path')

// ν˜„μž¬ 싀행쀑인 파일 경둜
__filename;

// ν˜„μž¬ 싀행쀑인 디렉토리
__dirname;

// 경둜 μ—°κ²°
path.join(__dirname, '/test')

// μƒλŒ€μ μΈ 경둜둜 μ—°κ²°.
path.resolve('/controllers', './user') 

// κ²½λ‘œμ— ν•΄λ‹Ήν•˜λŠ” 속성을 κ°€μ Έμ˜¨λ‹€.
path.parse(root, dir, base, ext, name)


profile
🐜https://action2thefuture.github.io/🐜

0개의 λŒ“κΈ€