paragraph
@new15730818
Reviews Written
-
Average Rating
-
Posts
Q&A
๋ก๊ทธ์ธ ํ์ ํ๋ฉด ๋ณํ๊ฐ ์์ต๋๋ค
์ ๋ ๋ก๊ทธ์ธ ํ ํ๋ฉด์ด ๋ฐ๋์ง ์์ต๋๋ค.app.jsconst express = require("express"); const cookieParser = require("cookie-parser"); const morgan = require("morgan"); const path = require("path"); const session = require("express-session"); const dotenv = require("dotenv"); //์ต๋ํ ์์ const nunjucks = require("nunjucks"); //db ๊ฐ์ฒด ์์ sequelize ์ฐ๊ฒฐ const { sequelize } = require("./models"); dotenv.config(); //process.env const pageRouter = require("./routes/page"); const { options } = require("../ch8/8.6/learn-mongoose/routes"); const passport = require("passport"); const passportConfig = require("./passport"); const authRouter = require("./routes/auth"); const postRouter = require("./routes/post"); const app = express(); passportConfig(); app.set("port", process.env.PORT || 8001); app.set("view engine", "html"); nunjucks.configure("views", { express: app, watch: true, }); sequelize .sync() .then(() => { console.log("๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ฑ๊ณต"); }) .catch((err) => { console.log(err); }); app.use(morgan("dev")); //๊ฐ๋ฐ์ ๋ชจ๋ ๋ก๊น , ์ค์ ์ด์์์๋ ํ์ํ ๋ก๊ทธ๋ง ์๋๋ฉด ์๋ฒ์ฉ๋ ๋ง์ด ์ฐจ์ง app.use(express.static(path.join(__dirname, "public"))); //publicํด๋๋ฅผ statc์ผ๋ก, ํ๋ก ํธ์์ public์ ์์ ๋กญ๊ฒ ์ ๊ทผํ ์ ์๋๋ก app.use(express.json()); //json ์์ฒญ ๋ฐ์ ์ ์์, req.body๋ฅผ ajax json ์์ฒญ์ผ๋ก๋ถํฐ app.use(express.urlencoded({ extended: false })); //req.body ํผ์ผ๋ก๋ถํฐ app.use(cookieParser(process.env.COOKIE_SECRET)); app.use( session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, //js์์ ์ ๊ทผ ๋ชปํ ๋ secure: false, //๋์ค์ true๋ก ๋ฐ๊พธ๊ธฐ }, }) ); app.use(passport.initialize()); app.use(passport.session()); //connect.sid๋ผ๋ ์ด๋ฆ์ผ๋ก ์ธ์ ์ฟ ํค๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ ์ก app.use("/", pageRouter); //๋ฃจํธ app.use("/auth", authRouter); //auth/join์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅ app.use("/post", postRouter); //์๋ ํ์ด์ง ์จ ๊ฒฝ์ฐ app.use((req, res, next) => { const error = new Error(`${req.method} ${req.url} ๋ผ์ฐํฐ๊ฐ ์์ต๋๋ค.`); error.status = 404; next(error); }); //์๋ฌ์ฒ๋ฆฌ ๋ฏธ๋ค์จ์ด app.use((err, req, res, next) => { res.locals.message = err.message; res.locals.error = process.env.NODE_ENV !== "production" ? err : {}; // ๋ฐฐํฌ๋ชจ๋๊ฐ ์๋๋ ์๋ฌ ํ์, ๋ฐฐํฌ์์๋ ์๋ฌ ๋ก๊ทธ๋ฅผ ์๋น์ค์ ๋๊ธด๋ค. ์ฌ์ฉ์ ํ๋ฉด์ ์๋ฌ ํ๋ฉด์ ๋ณด๋ด๋ ๊ฒ์ ์์ข์ res.status(err.status || 404); res.render("error"); }); app.listen(app.get("port"), () => { console.log(app.get("port"), "๋นํฌํธ์์ ๋๊ธฐ์ค"); }); routes > auth.jsconst express = require("express"); const passport = require("passport"); const { isLoggedIn, isNotLoggedIn } = require("../middlewares"); const { join, login, logout } = require("../controllers/auth"); const router = express.Router(); // POST /auth/join router.post("/join", isNotLoggedIn, join); // POST /auth/login router.post("/login", isNotLoggedIn, login); // GET /auth/logout router.get("/logout", isLoggedIn, logout); // GET /auth/kakao router.get("/kakao", passport.authenticate("kakao")); // GET /auth/kakao/callback router.get( "/kakao/callback", passport.authenticate("kakao", { failureRedirect: "/?error=์นด์นด์ค๋ก๊ทธ์ธ ์คํจ", }), (req, res) => { res.redirect("/"); // ์ฑ๊ณต ์์๋ /๋ก ์ด๋ } ); module.exports = router; routes> page.js const express = require("express"); const router = express.Router(); const { renderJoin, renderMain, renderProfile, } = require("../controllers/page"); const { isLoggedIn, isNotLoggedIn } = require("../middlewares"); router.use((req, res, next) => { res.locals.user = null; //์ฌ์ฉ์ ์ ๋ณด res.locals.followerCount = 0; res.locals.followingCount = 0; res.locals.followingIdList = 0; next(); //๋ฅผ ๊ผญ ์จ์ผํจ }); router.get("/profile", isLoggedIn, renderProfile); router.get("/join", isNotLoggedIn, renderJoin); router.get("/", renderMain); module.exports = router; controller > auth.jsconst User = require("../models/user"); const bcrypt = require("bcrypt"); const passport = require("passport"); exports.join = async (req, res, next) => { const { nick, email, password } = req.body; try { const exUser = await User.findOne({ where: { email } }); if (exUser) { return res.redirect("/join?error=exist"); } const hash = await bcrypt.hash(password, 12); await User.create({ email, nick, password: hash, }); return res.redirect("/"); //302 } catch (error) { console.error(error); next(error); } }; exports.login = (req, res, next) => { passport.authenticate("local", (authError, user, info) => { if (authError) { //์๋ฒ์คํจ console.error(authError); return next(authError); } if (!user) { //๋ก์ง์คํจ return res.redirect(`/?loginError=${info.message}`); } return req.login(user, (loginError) => { //๋ก๊ทธ์ธ ์ฑ๊ณต if (loginError) { console.error(loginError); return next(loginError); } return res.redirect(`/`); }); })(req, res, next); //authError:์๋ฒ์คํจ, user:์ฑ๊ณต์ ์ , info:๋ก์ง์คํจ }; exports.logout = (req, res, next) => { //์ธ์ ์ฟ ํค๋ฅผ ์์ ๋ฒ๋ฆผ req.logout(() => { res.redirect("/"); }); }; controller > page.js exports.renderProfile = (req, res, next) => { //์๋น์ค๋ฅผ ํธ์ถ res.render("profile", { title: "๋ด ์ ๋ณด - NodeBird" }); }; exports.renderJoin = (req, res, next) => { res.render("join", { title: "ํ์๊ฐ์ - NodeBird" }); }; exports.renderMain = (req, res, next) => { res.render("main", { title: "NodeBird", twits: [] }); }; //๋ผ์ฐํฐ -> ์ปจํธ๋กค๋ฌ(์์ฒญ,์๋ต ์๋ค) -> ์๋น์ค(์์ฒญ,์๋ต, ๋ชจ๋ฅธ๋ค)
- 0
- 3
- 248
Q&A
11:48์ด ๋ถ๋ถ ์ง๋ฌธ์ ๋๋ค.
์ ๋ก์ด๋,์ ๋ ์ ์ง๋ฌธ๊ณผ ๋์ผํ ์๊ฐ์ด ๋ค์์๋๋ฐ์ ๊ทธ๋ฌ๋ฉด void๊ฐ ์ฝ๋์ฝ๋ ์ฌ๋์๊ฒ ์ด๋ค ๊ฐ์ ๋ฐํํ์ง ์๋ ๊ฒ์ ๋ช ์์ ์ผ๋ก ์๋ ค์ฃผ๋ ์ฉ๋๋ผ๊ณ ์ดํดํ๋ฉด ๋ ๊น์?
- 0
- 2
- 352
Q&A
์๋๋ก์ด๋๋น๋ ์๋ฌ
์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด์์ใ ๊ฐ์ฌ๋์ด ๋ณด๋ด์ฃผ์ ํฐ์คํ ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํด์ ํด๋ดค๋๋ฐ๋ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋น๋๋ค. ํน์ ์ ๊ฐ ๊ฒฝ๋ก๋ฅผ '/Users/mm/food-delivery~'๋ก ํ์ง ์์ ๋ฌธ์ ๋ ์์๊น์? ใ Included build '/Users/mm/Desktop/study/food-delivery-app/setting/node_modules/react-native-gradle-plugin' does not exist.* Try:Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 2s at makeError (/Users/mm/Desktop/study/food-delivery-app/setting/node_modules/@react-native-community/cli-platform-android/node_modules/execa/index.js:174:9) at /Users/mm/Desktop/study/food-delivery-app/setting/node_modules/@react-native-community/cli-platform-android/node_modules/execa/index.js:278:16 at processTicksAndRejections (node:internal/process/task_queues:96:5) at async runOnAllDevices (/Users/mm/Desktop/study/food-delivery-app/setting/node_modules/@react-native-community/cli-platform-android/build/commands/runAndroid/runOnAllDevices.js:109:5) at async Command.handleAction (/Users/mm/Desktop/study/food-delivery-app/setting/node_modules/@react-native-community/cli/build/index.js:192:9)
- 0
- 2
- 4.7K




