nonneng.ee
Daeun-rithm
nonneng.ee
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (51)
    • Back-end (17)
      • Server (3)
      • Database (3)
      • Spring (9)
      • Node.js (1)
    • Book (1)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (0)
      • ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ (1)
    • Algorithm (1)
      • Greedy, Implementation (6)
      • Dynamic Programming (5)
      • Data Structure (3)
      • Sorting (2)
      • Concept (1)
    • TIL (11)
    • Software (3)
      • Design Pattern (3)
    • Computer Science (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • DP
  • ์•„์ดํ…œ8
  • ์ปดํŒŒ์ผ์„ค์น˜
  • ์•„์ดํ…œ 25
  • Java
  • Spring
  • JPA
  • ๊ตฌ๋™์›๋ฆฌ
  • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”
  • ์ž๋ฐ”
  • node js
  • API
  • ์•„์ดํ…œ9
  • ์†Œ์Šค์„ค์น˜
  • ๊ตฌํ˜„
  • ํŒŒ์ด์ฌ
  • ๋ฐฑ์ค€
  • MySQL
  • ์šฐ๋ถ„ํˆฌ
  • ๋ธŒ๋ฃจํŠธํฌ์Šค
  • ๊ฐ€์ƒ๋จธ์‹ 
  • ์—๋Ÿฌ
  • ์„œ๋ฒ„
  • Postman
  • ์•„์ดํ…œ 23
  • Restful API
  • ์•„์ดํ…œ6
  • jwt
  • ์ˆ˜๋™์„ค์น˜
  • APM

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
nonneng.ee

Daeun-rithm

TIL

[TIL] 2021-08-26

2021. 8. 27. 03:20

๐Ÿ˜Š Today I Learned

  1. Youtube API ์ˆ˜์ •ํ•˜๊ธฐ
    → JWTํ† ํฐ ํ•„์š”ํ•œ API ์œ„์ฃผ๋กœ

 

๐Ÿ˜ข Today's error

Error 1. Cannot destructure property

Untitled
// ์˜์ƒ ์‚ญ์ œ
app.patch('/videos/delete/:videoIdx', jwtMiddleware, video.deleteVideo);
  • ๋กœ๊ทธ์ธ API๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ๊ธ‰ํ•œ JWTํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” API์ธ๋ฐ, Route์—์„œ jwtMiddleware๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์ด๋‹ค.

 

Error 2. ReferenceError : connection is not defined

Untitled 1
  • videoDao.videoAccessCheck์—์„œ Connection pool์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐ๋œ Connection์„ ๋งŒ๋“  ํ›„ Pool์— ๋ณด๊ด€ํ•˜์˜€๋‹ค๊ฐ€ ํ•„์š”ํ•  ๋•Œ Pool์—์„œ Connection์„ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ์›๋ฆฌ์ด๋ฏ€๋กœ,
    → Provider๋‚˜ Service์—์„œ Connection์„ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ Dao์—์„œ Connection์„ ๊ฐ€์ ธ์™€์•ผ ์ฟผ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.

 

์™„์„ฑ๋œ ์˜์ƒ ์‚ญ์ œ API

 

videoRoute.js

app.delete('/videos/delete/:videoIdx', jwtMiddleware, video.deleteVideo);

 

videoController.js

exports.deleteVideo = async function(req, res){
    const videoIdx = req.params.videoIdx;

    const userIdxFromJWT = req.verifiedToken.userIdx;
    console.log(`๋ฐ›์•„์˜จ ์ธ๋ฑ์Šค : ${userIdxFromJWT}`);

    if (!videoIdx){
        return res.send(errResponse(baseResponse.VIDEO_VIDEOIDX_EMPTY));
    }

    const [videoAccessCheck] = await videoDao.videoAccessCheck(videoIdx);
    if (videoAccessCheck[0].userIdx !== userIdxFromJWT){
        return res.json({
            isSuccess : false,
            code : 301,
            message : "์˜์ƒ ์‚ญ์ œ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค"
        });
    }

    try{
        await videoDao.deleteVideo(videoIdx);

        res.json({
            isSuccess : true,
            code : 200,
            message : "์˜์ƒ ์‚ญ์ œ ์„ฑ๊ณต"
        });
    } catch (err){
        logger.error(`App - DeleteVideo Query error\n : ${JSON.stringify(err)}`);
        return false;
    }
}

 

videoDao.js

async function videoAccessCheck(videoIdx){
    const connection = await pool.getConnection(async (conn) => conn);
    const videoAccessCheckQuery = `
        select userIdx
        from Video
        where videoIdx = ?;
        `;
    const videoAccessCheckRow = await connection.query(
        videoAccessCheckQuery,
        videoIdx
    );
    connection.release();
    return videoAccessCheckRow;
}

๐Ÿ˜… Comment

๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„ ์‹ ๊ฒฝ์“ฐ๊ธฐ

'TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] 2021-08-29  (1) 2021.08.30
[TIL] 2021-08-27  (0) 2021.08.28
[TIL] 2021-08-25  (2) 2021.08.26
    'TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [TIL] 2021-10-09
    • [TIL] 2021-08-29
    • [TIL] 2021-08-27
    • [TIL] 2021-08-25
    nonneng.ee
    nonneng.ee

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”