๐ŸŒฑ → ๐ŸŒณ

[node.js] Session์œผ๋กœ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•˜๊ธฐ ๋ณธ๋ฌธ

Server/Node.js

[node.js] Session์œผ๋กœ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•˜๊ธฐ

BAY 2022. 9. 24. 17:43
728x90

๐Ÿ“Œ session 

: ์„œ๋ฒ„์˜ ์ฟ ํ‚ค 

session

 

๐Ÿ“ HTTP Session ์ด๋ž€?

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ์ฟ ํ‚ค
  • ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†ํ•œ ์‹œ์ ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ์„ ๋๋‚ด๋Š” ์‹œ์ ์„ ํ•˜๋‚˜์˜ ์ƒํƒœ๋กœ ๋ณด๊ณ  ์œ ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•จ -> ๋กœ๊ทธ์ธ ์œ ์ง€
  • ์„œ๋ฒ„๋Š” ๊ฐ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์„ธ์…˜์„ ๋ฐœํ–‰ํ•˜๊ณ  ์„œ๋ฒ„๋กœ ์ ‘๊ทผ(request)ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋„๊ตฌ๋กœ ์‚ฌ์šฉ
  • ์ฟ ํ‚ค์™€ ๋‹ฌ๋ฆฌ ์ €์žฅ ๋ฐ์ดํ„ฐ์— ์ œํ•œ ์—†์Œ
  • ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ฐ”๋กœ ์‚ญ์ œ 

 

๐Ÿ“HTTP Session์˜ ๋™์ž‘ ๋ฐฉ์‹ 

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ตœ์ดˆ๋กœ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์„ ํ•˜๋ฉด ํ•˜๋‚˜์˜ session-id(์ž„์˜์˜ ๊ธด ๋ฌธ์ž์—ด)๊ฐ€ ๋ฐœํ–‰
  • ๋ฐœํ–‰ ๋œ session-id๋Š” ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ฟ ํ‚ค ํ˜•ํƒœ๋กœ ์ €์žฅ๋จ
  • ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์ ‘๊ทผ ์‹œ, ์ฟ ํ‚ค์— ์ €์žฅ๋œ session-id๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํ•จ

 

โœ”๏ธ Cookie vs Session

  • ํ•˜๋Š” ์—ญํ• ์€ ๋น„์Šท 
  • ์ฟ ํ‚ค : ๋กœ์ปฌ์— ์ €์žฅ๋˜๋ฏ€๋กœ ๋ณด์•ˆ ์ด์Šˆ ๋ฐœ์ƒ ๊ฐ€๋Šฅ 
  • ์„ธ์…˜ : ๋กœ์ปฌ์— session-id๋งŒ ์ €์žฅํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋ณด์•ˆ์ด ๋” ์ข‹์Œ 
  • ๋‹จ, ์ฟ ํ‚ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์†๋„๊ฐ€ ๋น ๋ฆ„
  • ์„ธ์…˜์€ ์ฟ ํ‚ค์—์„œ session-id๋ฅผ ์ฝ์–ด์„œ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋ฏ€๋กœ ์†๋„๋Š” ๋” ๋Š๋ฆผ

 

๐Ÿ“Œ Session์œผ๋กœ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•˜๊ธฐ

๐Ÿ“session ๋ชจ๋“ˆ ์„ค์น˜

npm i express-session -s

 

 

๐Ÿ“session ๋ชจ๋“ˆ ์ถ”๊ฐ€ ๋ฐ ๋ฏธ๋“ค์›จ์–ด ์—ฐ๊ฒฐ 

const session = require('express-session')
const app = express();
app.use(
  session({
    secret: 'bay',
    resave: false,
    saveUninitialized: true,
    cookie: {
      maxAge: 1000 * 60 * 60,
    },
  })
);

 

๐Ÿ“ session ๋ชจ๋“ˆ ์˜ต์…˜ ์„ค๋ช…

  • secret: ์„ธ์…˜์„ ๋ฐœ๊ธ‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค ๊ฐ’(์•„๋ฌด๊ฑฐ๋‚˜ ์ž…๋ ฅ ๊ฐ€๋Šฅ)
  • resave: ๋ชจ๋“  request๋งˆ๋‹ค ๊ธฐ์กด์— ์žˆ๋˜ session์— ์•„๋ฌด๋Ÿฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†์–ด๋„ session์„ ๋‹ค์‹œ ์ €์žฅํ•˜๋Š” ์˜ต์…˜
  • saveUninitialized: ์„ธ์…˜์— ์ €์žฅํ•  ๋‚ด์—ญ์ด ์—†๋”๋ผ๋„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ธ์…˜์„ ์ƒ์„ฑํ• ์ง€ ์„ค์ • 
  • secure: https ์—์„œ๋งŒ ์„ธ์…˜์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ(http์—์„œ๋Š” ์„ธ์…˜ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ ๋ถˆ๊ฐ€๋Šฅ)
  • cookie: ์„ธ์…˜ ์ฟ ํ‚ค ์„ค์ • (์„ธ์…˜ ๊ด€๋ฆฌ์‹œ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด๋Š” ์ฟ ํ‚ค)
    • maxAge: ์ฟ ํ‚ค์˜ ์ƒ๋ช… ๊ธฐ๊ฐ„, ๋‹จ์œ„๋Š” ms
    • httpOnly: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์„ธ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ๊ฐ•์ œ

 

โœ… ํšŒ์› ๊ฐ€์ž… ํŽ˜์ด์ง€

register.ejs/ register.js ์ƒ์„ฑ

// register.js
// ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๋ชจ๋“ˆํ™”

const express = require('express');
const mongoClient = require('./mongo');
const router = express.Router();

router.get('/', (req, res) => {
  res.render('register');
});

module.exports = router;

 

๐Ÿ“ ์„œ๋ฒ„์— ๋ผ์šฐํ„ฐ ๋“ฑ๋ก

const registerRouter = require('./routes/register');
app.use('/register', registerRouter);

 

๐Ÿ“ register.ejs์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ 

  • post ๋ฐฉ์‹/ register ์ฃผ์†Œ๋กœ ํšŒ์› ๊ฐ€์ž… ์š”์ฒญํ•˜๋ฏ€๋กœ
  • 'users'๋ผ๋Š” collection ๋งŒ๋“ค์–ด์„œ ํšŒ์› ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
  • req.body์— ๋‹ด๊ฒจ์žˆ๋Š” id๊ฐ€ db์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ ์กด์žฌํ•  ๊ฒฝ์šฐ id ์ค‘๋ณต ์•ˆ๋‚ด
    • ํšŒ์› ๊ฐ€์ž… ํŽ˜์ด์ง€๋กœ ์ด๋™ ์•ˆ๋‚ด 
  • id๊ฐ€ ์ค‘๋ณต๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, db์— ์ƒˆ๋กœ์šด ํšŒ์›์„ ๋“ฑ๋กํ•˜๊ณ  ํšŒ์› ๊ฐ€์ž… ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
    • ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ ์•ˆ๋‚ด 
router.post('/', async (req, res) => {
  const client = await mongoClient.connect();
  const userCursor = client.db('db๋ช…').collection('users');
  const duplicated = await userCursor.findOne({
    id: req.body.id,
  });
  if (duplicated === null) {
    const result = await userCursor.insertOne({
      id: req.body.id,
      password: req.body.password,
    });
    if (result.acknowledged) {
      res.send('ํšŒ์› ๊ฐ€์ž… ์„ฑ๊ณต!<br><a href="/login">๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™</a>');
    } else {
      res.status(404);
      res.send(
        'ํšŒ์› ๊ฐ€์ž… ๋ฌธ์ œ ๋ฐœ์ƒ.<br><a href="/register">ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋กœ ์ด๋™</a>'
      );
    }
  } else {
    res.status(404);
    res.send(
      '์ค‘๋ณต๋œ id ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.<br><a href="/register">ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋กœ ์ด๋™</a>'
    );
  }
});

 

โœ… ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ 

login.ejs/ login.js ์ƒ์„ฑ

// login.js
// ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๋ชจ๋“ˆํ™”

const express = require('express');
const mongoClient = require('./mongo');
const router = express.Router();

router.get('/', async (req, res) => {
  res.render('login');
});

module.exports = router;

 

์„œ๋ฒ„์— ๋ผ์šฐํ„ฐ ๋“ฑ๋ก

const loginRouter = require('./routes/login');
app.use('/login', loginRouter);

 

โœ”๏ธ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ

  • post ๋ฐฉ์‹/ login ์ฃผ์†Œ๋กœ ๋กœ๊ทธ์ธ ์š”์ฒญํ•˜๋ฏ€๋กœ
  • req.body์— ๋‹ด๊ฒจ์žˆ๋Š” id๊ฐ€ db์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ•ด๋‹น id๊ฐ€ ์—†๋‹ค๊ณ  ์•ˆ๋‚ด 
    • ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€, ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ ์•ˆ๋‚ด 
  • id๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, id์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๊นŒ์ง€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋‘˜ ๋‹ค ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ์„ฑ๊ณต
    • req.session์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€/ ๋กœ๊ทธ์ธ ๋œ id๋ฅผ session์— ์ €์žฅ
    • ๊ฒŒ์‹œํŒ ์„œ๋น„์Šค๋กœ ์ด๋™
  • ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‹€๋ฆฌ๋ฉด ๋น„๋ฐ€ ๋ฒˆํ˜ธ ๋ถˆ์ผ์น˜ ์•ˆ๋‚ด
    • ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ ์•ˆ๋‚ด 
router.post('/', async (req, res) => {
  const client = await mongoClient.connect();
  const userCursor = client.db('db๋ช…').collection('users');
  const idResult = await userCursor.findOne({
    id: req.body.id,
  });
  if (idResult !== null) {
    const result = await userCursor.findOne({
      id: req.body.id,
      password: req.body.password,
    });
    if (result !== null) {
      req.session.login = true;
      req.session.userId = req.body.id;
      res.redirect('/board');
    } else {
      res.status(404);
      res.send(
        '๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค.<br><a href="/login">๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™</a>'
      );
    }
  } else {
    res.status(404);
    res.send(
      'ํ•ด๋‹น id ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.<br><a href="/login">๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™</a>'
    );
  }
});

 

โœ”๏ธ ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌ

  • ๋กœ๊ทธ ์•„์›ƒ ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ
    • board.ejs ํŒŒ์ผ์— ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ ์ถ”๊ฐ€
    • get๋ฐฉ์‹ /login/logout ์ฃผ์†Œ๋กœ ๋กœ๊ทธ์•„์›ƒ ์š”์ฒญ 
<div class="board_write">
  <span>ํ˜„์žฌ ๋“ฑ๋ก ๊ธ€ : &nbsp; <%= articleCounts %></span>
  <a class="btn red" href="/board/write">๊ธ€์“ฐ๊ธฐ</a>
  <a class="btn orange" href="/login/logout">๋กœ๊ทธ์•„์›ƒ</a>
</div>

๋กœ๊ทธ์•„์›ƒ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒ์„ฑ๋œ req.session์„ ์‚ญ์ œ ์ฒ˜๋ฆฌ -> ์ตœ์ดˆ ํ™”๋ฉด์œผ๋กœ ์ด๋™ 

router.get('/logout', async (req, res) => {
  req.session.destroy((err) => {
    res.redirect('/');
  });
});

 

โœ”๏ธ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ๊ฒŒ์‹œํŒ ์„œ๋น„์Šค ๋ณ€๊ฒฝ

  • ๋กœ๊ทธ์ธ์ด ์•ˆ๋˜์–ด ์žˆ์œผ๋ฉด ๊ฒŒ์‹œํŒ์— ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋„๋ก ์ˆ˜์ •
  • req.session์€ ์–ด๋Š ๋ผ์šฐํ„ฐ์—์„œ๋‚˜ ๋ถˆ๋Ÿฌ์„œ ์“ธ ์ˆ˜ ์žˆ์Œ
  • req.session.login์˜ ๊ฐ’์„ ํ™•์ธํ•ด์„œ ๊ฒŒ์‹œํŒ ์„œ๋น„์Šค๋กœ ์ด๋™ ํ• ์ง€, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ ์•ˆ๋‚ดํ• ์ง€ ๊ฒฐ์ •
  • board.ejs ํŒŒ์ผ์— req.session.id์— ์ €์žฅ๋œ ํšŒ์› id ์ •๋ณด๋„ ๊ฐ™์ด ์ „๋‹ฌ
router.get('/', async (req, res) => {
  if (req.session.login) {
    const client = await mongoClient.connect();
    const cursor = client.db('db๋ช…').collection('board');
    const ARTICLE = await cursor.find({}).toArray();
    
    const articleLen = ARTICLE.length;
    res.render('board', {
      ARTICLE,
      articleCounts: articleLen,
      userId: req.session.userId,
    });
  } else {
    res.status(404);
    res.send('๋กœ๊ทธ์ธ ํ•ด์ฃผ์„ธ์š”.<br><a href="/login">๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™</a>');
  }
});

 

๐Ÿ” ๋กœ๊ทธ์ธ ํ™•์ธ์šฉ ํ•จ์ˆ˜ ์ด์šฉ 

  • ๋ฏธ๋“ค์›จ์–ด์˜ 2๋ฒˆ์งธ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋กœ๊ทธ์ธ ํ™•์ธ์šฉ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ req.session ๊ฐ’์„ ํ†ตํ•ด ํŒ๋ณ„ํ•˜๊ณ , ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์œผ๋ฉด next()๋ฅผ ์ด์šฉํ•ด ๋’ค์˜ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ
  • if๋ฌธ์„ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
function isLogin(req, res, next) {
  if (req.session.login) {
    next();
  } else {
    res.send('๋กœ๊ทธ์ธ ํ•ด์ฃผ์„ธ์š”.<br><a href="/login">๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™</a>');
  }
}

router.get('/', isLogin, async (req, res) => {  
  const client = await mongoClient.connect();
  const cursor = client.db('kdt1').collection('board');
  const ARTICLE = await cursor.find({}).toArray();
  
  const articleLen = ARTICLE.length;
  res.render('board', {
    ARTICLE,
    articleCounts: articleLen,
    userId: req.session.userId,
  });  
});

 

โœ”๏ธ ๊ฒŒ์‹œ๊ธ€์— ์ž‘์„ฑ์ž id ์ •๋ณด ์ถ”๊ฐ€

  • ๊ฐ๊ฐ์˜ ๊ฒŒ์‹œ๊ธ€์˜ ์ž‘์„ฑ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ์ž์‹ ์ด ์ž‘์„ฑํ•œ ๊ธ€์€ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ๋ฒ„ํŠผ์ด ๋ณด์ด๋„๋ก ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ์œ„์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ฒŒ์‹œ๊ธ€ db์— ์ž‘์„ฑ์ž์˜ id ์ •๋ณด ์žˆ์–ด์•ผํ•จ

 

๐Ÿ“board.ejs ํŒŒ์ผ ์ˆ˜์ •

์ œ๋ชฉ ์œ„์— ์ž‘์„ฑ์ž์˜ id๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ถ€๋ถ„ ์ถ”๊ฐ€

<li>
   <div class="author">
       ์ž‘์„ฑ์ž : <%= ARTICLE[i].id %>
   </div>
   <div class="title">
       <%= ARTICLE[i].title %>
   </div>

 

๐Ÿ“์ž์‹ ์ด ์ž‘์„ฑํ•œ ๊ธ€์—๋งŒ ์ˆ˜์ • ์‚ญ์ œ ๋ฒ„ํŠผ ํ‘œ์‹œ

๊ฒŒ์‹œ๊ธ€์˜ ์ž‘์„ฑ์ž id์™€ ๋กœ๊ทธ์ธํ•œ ์œ ์ €์˜ id๋ฅผ ๋น„๊ตํ•ด์„œ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ๋ฒ„ํŠผ ํ‘œ์‹œ

<div class="foot">
    <% if (ARTICLE[i].id === userId) { %>
    <a class="btn orange" href="board/modify/<%= ARTICLE[i].title %>">์ˆ˜์ •</a>
    <a class="btn blue" href="#" onclick="deleteArticle('<%= ARTICLE[i].title %>')">์‚ญ์ œ</a>
    <% } %>
</div>

 

โœ”๏ธ ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€(์ˆ˜์ •, ์‚ญ์ œ) ๊ธฐ๋Šฅ ์ˆ˜์ •

๋กœ๊ทธ์ธ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์ด๋™์ด ์•ˆ๋˜๋„๋ก ์„ค์ •

router.get('/write', isLogin, (req, res) => {
  res.render('board_write');
});

 

๊ธ€์„ ์ถ”๊ฐ€ ํ•  ๋•Œ๋„ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ํŒ๋ณ„ 

์ƒˆ๋กœ์šด ๊ฒŒ์‹œ๊ธ€์„ ์ถ”๊ฐ€ํ•  ๋•Œ, title, content ์ด์™ธ์— id ๊ฐ’์œผ๋กœ ๋กœ๊ทธ์ธํ•œ ์œ ์ €์˜ id๊ฐ’์„ ๋ฐ›์•„์„œ ๊ธ€์„ ์ถ”๊ฐ€ 

router.post('/', isLogin, async (req, res) => {
  if (req.body) {
    if (req.body.title && req.body.content) {
      const newArticle = {
        id: req.session.userId,
        title: req.body.title,
        content: req.body.content,
      };

 

728x90