์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

Node.js์— TypeScript ์ ์šฉํ•˜๊ธฐ(feat. NodeBird)

Node.js์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ์šฉํ•ด๋ณด๊ณ , ๊ธฐ์กด npm ํŒจํ‚ค์ง€์— ํƒ€์ดํ•‘์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค.

Thumbnail

serializeUser์™€ deserializeUser ์—๋Ÿฌ๋‚˜๋Š” ๋ถ„๋“ค๊ป˜

passport ๊ด€๋ จ ํƒ€์ดํ•‘์ด ๋˜ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ๋„ค์š”.

types/index.d.ts์— ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ 

import IUser from '../models/user';

declare global {
    namespace Express {
        export interface User extends IUser {}
   }
}

passport/index.ts๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊พธ์„ธ์š”.
 passport.serializeUser((userdone=> {
    done(nulluser.id);
 });
  passport.deserializeUser<number>(async (iddone=> {
    try {
      const user = await User.findOne({
        where: { id },
     });
      if (!user) {
        return done(new Error('no user'));
     }
      return done(nulluser); // req.user
    } catch (err) {
      console.error(err);
      return done(err);
   }
});

๋ค์œผ๋กœ req.user๋„ req.user!.toJSON() as User ํ•  ํ•„์š” ์—†๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ req.user ์“ฐ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

tsconfig.json์—๋Š” ts-node ๋ถ€๋ถ„ ์ถ”๊ฐ€ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
{
"ts-node": {
"files": true
},
"compilerOptions": {
"strict": true,
"lib": ["es2020"],
"esModuleInterop": true,
"moduleResolution": "node",
"typeRoots": ["./types"]
}
}
๋Œ“๊ธ€