๐Ÿ“ ์˜ค๋Š˜ ํ•œ ๊ฒƒ

  1. ๋ณต์Šต - USER PROFILE

  2. ๋ณต์Šต - WEBPACK


๐Ÿ“š ๋ฐฐ์šด ๊ฒƒ (๋ณต์Šต)

์‹ค์ œ ์ฝ”๋“œ๋Š” github์— ์˜ฌ๋ฆผ(wetube_v2)

5. USER PROFILE

  • [TIL] 211204

    • edit profile
    • avatar ํŒŒ์ผ ์—…๋กœ๋“œ
    • git restore --staged / get fetch
  • [TIL] 211205

    • video ํŒŒ์ผ ์—…๋กœ๋“œ
    • populate()
    • user profile
    • ๋ฒ„๊ทธ ์ˆ˜์ •
      (1) ์˜์ƒ์„ ์˜ฌ๋ฆด ๋•Œ๋งˆ๋‹ค ํŒจ์Šค์›Œ๋“œ๊ฐ€ ํ•ด์‹ฑ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
      (2) owner๊ฐ€ ์•„๋‹Œ ๋กœ๊ทธ์ธ user๋„ video ์ˆ˜์ •/์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ

๐Ÿ’ก user.save() ํ•  ๋•Œ๋งˆ๋‹ค ํŒจ์Šค์›Œ๋“œ๊ฐ€ ํ•ด์‹ฑ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

  • this.isModified("password")๋ฅผ ์ถ”๊ฐ€ํ•ด user.save()๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ pre hook์ด ์‹คํ–‰๋˜๋„๋ก ํ•จ
  • !this.socialOnly๋ฅผ ์ถ”๊ฐ€ํ•ด github ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ณ„์ • ์ƒ์„ฑ ์‹œ์—๋Š” user.save()๋ฅผ ์‚ฌ์šฉํ•ด๋„ pre hook์ด ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•จ โ— (๋ณต์Šตํ•˜๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•œ ๋ถ€๋ถ„)
// User.js
userSchema.pre("save", async function () {
  if (!this.socialOnly && this.isModified("password")) {
    this.password = await bcrypt.hash(this.password, 5);
  }
});

๐Ÿ’ก populated fields์— sort() ์ ์šฉ (๋ณต์Šตํ•˜๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•œ ๋ถ€๋ถ„)

const user = await User.findById(id).populate({
  path: "videos",
  options: {
    sort: { createdAt: "desc" },
  },
});

6. WEBPACK

  • [TIL] 211206
    • user profile ๋ณต์Šต
    • webpack ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฒ•
      • entry / output / rules(babel-loader) / mode
      • MiniCssExtractPlugin / css-loader / sass-loader
      • watch / clean / nodemon.json(ignore, exec) / dev:server, dev:assets

โœจ ๋‚ด์ผ ํ•  ๊ฒƒ

  1. ๋ณต์Šต ๊ณ„์†ํ•˜๊ธฐ - CSS ์Šคํƒ€์ผ๋ง
profile
dev log

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN