월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
Application > Cookies 에 front에만 저장이 안 돼요...
안녕하세요 제로초님,Application > Cookies 에 sid가 front에만 저장이 안 되는 문제가 있습니다. sid가 back에는 저장이 됩니다.제가 아직 쿠키와 세션 이해가 부족한 건지.. axios config에 뭔가 문제가 있는건지,,, 구글링 해봐도 별 거 안 나오고.. 제가 이미 다 한 거고...https://stackoverflow.com/questions/71036779/cookies-sent-from-backend-but-not-set-correctly-on-frontendhttps://stackoverflow.com/questions/72105765/axios-doesnt-create-a-cookie-even-though-set-cookie-header-is-therefront: config/config.tsimport axios from "axios"; import { backUrl } from "../../config/config"; axios.defaults.baseURL = backUrl; axios.defaults.withCredentials = true; const instance = axios.create({ baseURL: backUrl, // cors withCredentials: true, // cookie (user info) }); // instance.interceptors.request.use(function (instance) { // const kakao_authorization = localStorage.getItem("kakao_authorization"); // const Token = localStorage.getItem("Authorization"); // const Retoken = localStorage.getItem("refresh-Token"); // instance.headers["Authorization"] = Token; // instance.headers["refresh-Token"] = Retoken; // instance.headers["kakao_authorization"] = kakao_authorization; // return instance; // }); export default instance; front - Network 탭front - Application > Cookies 탭back: app.jsconst express = require('express'); const morgan = require('morgan'); const cors = require('cors'); const session = require('express-session'); const cookieParser = require('cookie-parser'); const passport = require('passport'); const dotenv = require('dotenv'); const path = require('path'); const hpp = require('hpp'); const helmet = require('helmet'); const userRouter = require('./routes/user'); const postRouter = require('./routes/post'); const postsRouter = require('./routes/posts'); const db = require('./models'); const passportConfig = require('./passport'); dotenv.config(); const app = express(); db.sequelize.sync() .then(()=>{ console.log('db 연결 성공'); }) .catch(console.error); passportConfig(); app.use(express.json()); // axios로 data보낼 때 app.use('/', express.static(path.join(__dirname, 'uploads'))); // multipart form data app.use(express.urlencoded({ extended: true })); // 일반 form 일 때에는 url encoded로 받음 if (process.env.NODE_ENV === 'production') { app.use(morgan('combined')); app.use(hpp()); app.use(helmet({ contentSecurityPolicy: false })); app.use(cors({ origin: 'http://shinyoungyou.com', credentials: true, })); } else { app.use(morgan('dev')); app.use(cors({ origin: true, credentials: true, })); } app.use(cookieParser(process.env.COOKIE_SECRET)); app.use(session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false }, domain: process.env.NODE_ENV === 'production' && '.shinyoungyou.com' })); app.use(passport.initialize()); app.use(passport.session()); app.get('/', (req, res) => { res.send('Express + TypeScript Server'); }); app.post('/api/post', (req, res) => { res.send('this is post http method'); }); app.use("/user", userRouter); app.use("/post", postRouter); app.use("/posts", postsRouter); module.exports = app; back - Application > Cookies 탭
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
node. app.js 실행시 error 발생.
안녕하세요!models 구성하고, app.js 로 db import도 다 했는데, node app.js 실행하면 다음과 같은 에러 메세지가 뜹니다.Post.belongsToMany called with something that's not a subclass of Sequelize.Modelmodels에서 user, hashtag export 가 잘못된거 같아서 다 확인했는데, 문제를 못찾았습니다.어떤 부분이 잘 못된걸까요?감사합니다.
- 해결됨[리뉴얼] React로 NodeBird SNS 만들기
로그인시 LOG_IN_REQUEST 부분
이와 비슷한 문제가 많아서 참고해서 복붙도 해보면서 했는데도 해결되지 않아질문 남깁니다. 로그인 버튼을 누르면 리덕스 데브툴에이와 같이 나오고 saga가 연결이 되지 않는 거 같아요(코드 첨부)sagas/index.jsimport { all, fork } from 'redux-saga/effects'; // import postSaga from './post'; import userSaga from './user'; export default function* rootSaga() { console.log('rootSaga') yield all([ fork(userSaga), // fork(postSaga), ]); } sagas/user.jsimport { all } from "axios"; import { delay, fork, put, takeLatest } from "redux-saga/effects"; import { LOG_IN_FAILURE, LOG_IN_REQUEST, LOG_IN_SUCCESS, LOG_OUT_FAILURE, LOG_OUT_REQUEST, LOG_OUT_SUCCESS } from "../reducers/user"; // function logInApi(data) { // // 비동기 처리 함수는 일반함수로 정의 // return axios.post("api/login", data); // } // function logOutApi() { // // 비동기 처리 함수는 일반함수로 정의 // return axios.post("api/login"); // } function* logIn(action) { console.log('login') try { console.log('saga logIn'); // const result = yield call(logInApi, action.data); //요청의 결과 yield delay(1000); yield put({ type: LOG_IN_SUCCESS, data: action.data, }); } catch (err) { console.error(err); yield put({ type: LOG_IN_FAILURE, data: err.response.data, }); } } function* logOut() { console.log('login') try { // const result = yield call(logOutApi); //요청의 결과 yield delay(1000); yield put({ type: LOG_OUT_SUCCESS, }); } catch (err) { console.error(err); yield put({ type: LOG_OUT_FAILURE, data: err.response.data, }); } } function* watchLogIn() { console.log('watchLogIn') yield takeLatest(LOG_IN_REQUEST, logIn); } function* watchLogOUT() { console.log('watchLogOUT') yield takeLatest(LOG_OUT_REQUEST, logOut); } export default function* userSaga() { yield all([ fork(watchLogIn), fork(watchLogOUT) ]) } const g = watchLogIn(); console.log(g.next())sagas/posts.js import { all } from "axios"; import { delay, fork, put, takeEvery } from "redux-saga/effects"; // function addPostsApi(data) { // // 비동기 처리 함수는 일반함수로 정의 // return axios.post("api/login", data); // } function* addPosts(action) { console.log('addPosts') try { // const result = yield call(addPostsApi, action.data); //요청의 결과 yield delay(1000); yield put({ type: "ADD_POST_SUCESS", data: action.data, }); } catch (err) { yield put({ type: "ADD_POST_FAILURE", data: err.response.data, }); } } function* watchAddPost() { yield takeEvery("ADD_POST_REQUEST", addPosts); } export default function* postSaga() { yield all([fork(watchAddPost)]); } reducers/index.jsimport { HYDRATE } from "next-redux-wrapper"; import { combineReducers } from "redux"; import user from "./user"; import post from "./post"; // (이전 상태, 액션) => 다음 상태 const rootReducer = combineReducers({ index: (state = {}, action) => { switch (action.type) { case HYDRATE: console.log("HYDRATE", action); return { ...state, ...action.payload }; default: return state; } }, user, post, }); export default rootReducer; reducers/user.jsexport const initialState = { isLoggingIn: false, //로그인 시도(로딩)중 isLoggedIn: false, // 로그인된 상태 isLoggingOut: false, // 로그아웃 시도(로딩)중 me: null, //내정보 signUpData: {}, loginData: {}, }; export const LOG_IN_REQUEST = 'LOG_IN_REQUEST'; export const LOG_IN_SUCCESS = 'LOG_IN_SUCCESS'; export const LOG_IN_FAILURE = 'LOG_IN_FAILURE'; export const LOG_OUT_REQUEST = 'LOG_OUT_REQUEST'; export const LOG_OUT_SUCCESS = 'LOG_OUT_SUCCESS'; export const LOG_OUT_FAILURE = 'LOG_OUT_FAILURE'; export const loginRequestAction = (data) => ({ type: LOG_IN_REQUEST, data }); export const logOutRequestAction = () => ({ type: LOG_OUT_REQUEST, }); const user = (state = initialState, action) => { switch (action.type) { case LOG_IN_REQUEST: console.log('reducer login') return { ...state, isLoggingIn: true, }; case LOG_IN_SUCCESS: return { ...state, isLoggingIn: false, isLoggedIn: true, me: {...action.data, nickname: 'skylove1004'}, }; case LOG_IN_FAILURE: return { ...state, isLoggingIn: false, isLoggedIn: false, }; case LOG_OUT_REQUEST: return { ...state, isLoggingOut: true, }; case LOG_OUT_SUCCESS: return { ...state, isLoggingOut: false, isLoggedIn: false, me: null, }; case LOG_OUT_FAILURE: return { ...state, isLoggingOut: false, }; default: return state; } }; export const userState = (state) => state.user; export default user;reducers/post.jsexport const initialState = { mainPosts: [ { id: 1, User: { id: 1, nickname: "skyblue5030", }, content: "첫 번째 게시글 #express #react", Images: [ { src: "https://bookthumb-phinf.pstatic.net/cover/137/995/13799585.jpg?udate=20180726", }, { src: "https://gimg.gilbut.co.kr/book/BN001958/rn_view_BN001958.jpg", }, { src: "https://gimg.gilbut.co.kr/book/BN001998/rn_view_BN001998.jpg", }, ], Comments: [ { User: { nickname: "nero", }, content: "우와 개정판이 나왔군요~", }, { User: { nickname: "hero", }, content: "얼른 사고싶어요~", }, ], }, ], imagePaths: [], //이미지업로드시 추가됨 postAdded: false, }; const ADD_POST = "ADD_POST"; export const addPost = { type: ADD_POST, }; const dummyPost = { id: 2, content: "더미데이터입니다.", User: { id: 1, nickname: "제로초", }, Images: [], Comments: [], }; // 데이터를 먼저 구성, 화면은 작성한 데이터나 데이터 변경을 기준으로 구성 // 데이터 구조는 서버측과 합의해서 구성해야 나중에 수정할 일이 없음 const post = (state = initialState, action) => { switch (action.type) { case 'ADD_POST_SUCCESS': return { ...state, mainPosts: [dummyPost, ...state.mainPosts], // 데이터을 앞에 추가해서 게시글이 위로 올라가게 postAdded: true, }; default: return state; } }; export const postState = (state) => state.post; export default post; store/configureStore.js import { applyMiddleware, compose, createStore } from "redux"; import createSagaMiddleware from "redux-saga"; import { createWrapper } from "next-redux-wrapper"; import { composeWithDevTools } from "redux-devtools-extension"; import reducer from "../reducers"; import rootSaga from "../sagas"; const loggerMidddleware = ({ getState }) => (next) => (action) => { console.log({ action, getState }); return next(action); }; const configureStore = () => { const sagaMiddleware = createSagaMiddleware(); const middlewares = [sagaMiddleware, loggerMidddleware]; const enhancer = process.env.NODE_ENV === "production" ? compose(applyMiddleware(...middlewares)) : composeWithDevTools(applyMiddleware(...middlewares)); const store = createStore(reducer, enhancer); store.sagaTask = sagaMiddleware.run(rootSaga); return store; }; const wrapper = createWrapper(configureStore, { debug: process.env.NODE_ENV === "development", }); export default wrapper;
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
로그아웃 하고 로그인 할 때 좋아요 기능 실행되는 문제
안녕하세요 제로초님! 게시글 좋아요 부분 듣고 다시 작성해보고 있는데처음 로딩 시에는 좋아요 버튼 눌렀을 때 로그인 하지 않은 상태면 에러 메시지가 잘 나오는데 ( 로그인 안 하면 좋아요 못 누르게)첫 번째 문제는 로그인 했다가 로그아웃을 한 뒤에 좋아요 버튼을 누르면 화면에는 변화가 없지만 리덕스에는 LIKE_POST_REQUEST -> LIKE_POST_SUCCESS가 되어서 이전에 로그인했던 사용자의 아이디가 LIKERS에 들어갑니다.// middlewares.js exports.isLoggedIn = (req, res, next) => { if (req.isAuthenticated()) { next(); } else { res.status(401).send('로그인이 필요합니다.'); } }여기 middlewares에 콘솔을 띄어보니 로그인 했다가 로그아웃을 한 상태에서 버튼을 누르면 401에러 부분이 아니라 if ( req.isAuthenticated()) 부분이 실행됩니다.!! // 에러 메시지 출력부분 PostCard.js// PostCard.js const { removePostLoading, likePostError } = useSelector((state) => state.post); useEffect(() => { if (likePostError) { alert(likePostError); } }, [likePostError]);// routes/user.js - 로그아웃 부분router.post('/logout', isLoggedIn, (req, res, next) => { req.logout((err) => { if (err) { return next(err); } }); req.session.destroy(); res.send('ok'); });
- 해결됨[리뉴얼] React로 NodeBird SNS 만들기
서버 요청 시 request cookie 가 2개가 생성이 됩니다..
안녕하세요 제로초님!최근 다시한번 노드버드를 참고하여 따로 사이드 프로젝트를 진행중에 있습니다.진행은 nginx 설정까지 마무리 하고 배포까지 성공적으로 진행이 되었습니다. 실제 사용도 했었고, 어제까지만 해도 큰 문제가 없었습니다. 다만 오늘 이미지를 로드해오는 과정에서 gateout 에러가 좀 발생하는것 같아 방법을 찾아보면서 pm2의 ecosystem.config.js 설정 등을 하다가 잘 안되는것 같아 다시 지우고 재 실행을 했습니다.실행을 다시 하니 로그인은 유지가 되는데, 데이터를 가져오려니 401 인증 에러가 발생하여 질문 드립니다..오류가 뜨는 이유가 무엇일까 생각했었는데, 우선 쿠키가 관련이 있겠다 생각해서 application - cookie 탭에서 확인을 해봤습니다.실제 도메인 주소, secure 설정까지 다 맞춰서 들어와있음을 확인했고, 그렇기에 새로고침을 했을 시 로그인은 유지가 되었습니다.네트워크 쪽을 살펴보니분명 쿠키가 같이 request 되고 있었습니다. 근데 이상하게도 쿠키가 application 에 저장된 문자와 다름을 확인했고 request 의 cookie 탭을 확인해보니이렇게 2가지 도메인으로 쿠키가 생성되어 전달되고 있음을 확인했습니다.하나는 api. 가 붙어있었고 하나는 실제 로그인을 유지시켜주는 도메인이었습니다.계속 고민을 해봐도 왜 request 에 위와같이 2개의 쿠키가 전달이 되는지 이유를 알 수 없어서 질문드립니다..도메인은 강의처럼 .주소 형식으로 했습니다.백엔드 nginx.conf 입니다프론트 nginx.conf 입니다프론트 pm2 list 입니다백엔드 pm2 list 입니다.답변 부탁드리겠습니다 ㅜㅜ...
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
백엔드 https 설정
안녕하세요 제로초님 혹시 백엔드도 /etc/nginx/nginx.conf 이것만 따로 설정해주고 /etc/nginx/sites-enabled/default 이건 프론트랑 똑같이 설정해주면 되는건가요?
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
nginx + https 적용하기 강의중
sudo service nginx start 할때 마다 Job for nginx.service failed because the control process exited with error code.See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.이에러가 뜹니다https://www.zerocho.com/category/NodeJS/post/5ef450a5701d8a001f84baeb 이블로그 보면서 했습니다 ㅠㅠ
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
이미지 업로드 할때 한글이름 파일 500에러
안녕하세요 제로초님 이미지 업로드할때 한글이름으로 된 이미지를 업로드하면 화면에 보여지고 s3에도 업로드는 되는데 post할때는 500에러가 나네요 ㅠㅠ 백엔드에 encodeURIComponent하고 normalize("NFC") 까지 써봤는데 고쳐지지가 않아서 문의 남깁니다 ㅠㅠconst upload = multer({ storage: multerS3({ s3: new AWS.S3(), bucket: "react-sansbook-aws", key(req, file, cb) { cb( null, `original/${Date.now()}_${path.basename( encodeURIComponent(file.originalname) )}` ); }, }), limits: { fileSize: 20 * 1024 * 1024 }, // 20MB
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
npm run dev 에러
script에서 dev를 못 찾는 다고 해서 scripts에서 s가 문제인가 해서 script 로 바꿨는데 이게 아닌가 봅니다 어떻게 하나요?{ "name": "front", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "dev": "next" }, "author": "Seung Won", "license": "ISC" }npm ERR! npm ERR! To see a list of scripts, run: npm ERR! npm run npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\USER\AppData\Local\npm-cache\_logs\2023-04-29T14_33_46_373Z-debug-0.log PS C:\Users\USER\Desktop\1080\new react\front> npm run dev npm ERR! Missing script: "dev" npm ERR! npm ERR! To see a list of scripts, run: npm ERR! npm run npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\USER\AppData\Local\npm-cache\_logs\2023-04-29T14_34_59_051Z-debug-0.log
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
swr ssr 관련 질문드립니다.
getServersideProps에서 작성한 api는 ssr이든 csr이든 무조건 실행되는데 ssr시에만 실행하고 csr에서는 막을 방법이 없을까요?페이지에서 컴포넌트로 props 넘기지 않고 swr 설정해서 초기에 ssr은 잘 되는데 그 이후 클릭으로 csr 방식으로 다른페이지 이동했다가 다시 돌아왔을때swr 사용중이고 캐싱중임에도 불구하고 getServersideProps에서 작성한 api가 매번 호출되어 25.json?id=25이런식으로 데이터 받아와서 리렌더링되는데 막을 방법이 없을까요?
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
람다강의에서 런타임 설정 편집부분
안녕하세요 제로초님람다 런타임 설정 편집부분 화면이 좀 바뀐거같아서 질문 남깁니다! 저는 이렇게 보입니다일단 index를 exports로 바꿨는데 이대로 그냥 저장하고,진행했더니 thumb파일도 안만들어지고 이미지도 평소에 잘뜨던게 undefined로 떠서 문제를 찾아보고 있었습니다
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
lamda폴더
안녕하세요 제로초님 저는 폴더 구조를 한 폴더안에 프론트 백엔드 담겨있지않고 다 따로 두고 있는데 그럴경우에 람다도 따로 보관해도 되는지 궁금합니다 아니면 지금 임시로 백엔드 폴더 안에 두고 진행하고있는데 괜찮은지 궁금합니다!
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
s3 연결하기 강의중 이미지 포함 post
안녕하세요 제로초님 늦은 밤에 죄송합니다현재 이미지 업로드하고 미리보기까지 나오는거 확인하고 올렸는데 성공했다고만 뜨고 정작 이미지 파일만 빼고 post성공한거같습니다 그리고 게시글은 올려 지긴 하나 사진 빼고 내용만 나옵니다 지금까지 콘솔내용을 보고 Images에 어떻게 넣을까 고민하다가 postform하고 백에서 routes/post.js부분을 건드려봤지만 아무런 성과가 없었습니다 에러도 안나와서 어딜봐야할지 잘모르겠습니다 ㅠㅠ
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
dialect: "mysql" 오타없이 잘 입력했고, mysql2도 node_modules 안에 잘 깔려 있는데 뭐가 문제일까요..
vim env 까지 진행 해서 password까지는 문제 없이 실행이 되어서, dialect: "mysql" 여기까지 실행이 되다가 에러가 뜬 거 같거든요..ubuntu@ip-172-31-15-69:~$ cd serverjs-nextproject/ ubuntu@ip-172-31-15-69:~/serverjs-nextproject$ npx sequelize db:create Sequelize CLI [Node: 14.21.3, CLI: 6.6.0, ORM: 6.28.0] Loaded configuration file "config/config.js". ERROR: Dialect undefined does not support db:create / db:drop commands ubuntu@ip-172-31-15-69:~/serverjs-nextproject$ ls app.js controllers models node_modules package.json routes config index.js mysql-apt-config_0.8.13-1_all.deb package-lock.json passport uploads ubuntu@ip-172-31-15-69:~/serverjs-nextproject$ cd node_modules/ ubuntu@ip-172-31-15-69:~/serverjs-nextproject/node_modules$ ls @mapbox encodeurl memoizee safe-buffer @types es5-ext merge-descriptors safer-buffer abbrev es6-iterator methods semver accepts es6-symbol mime send agent-base es6-weak-map mime-db seq-queue ansi-regex escalade mime-types sequelize ansi-styles escape-html minimatch sequelize-cli anymatch etag minimist sequelize-pool append-field event-emitter minipass serve-static aproba express minizlib set-blocking are-we-there-yet express-session mkdirp setprototypeof array-flatten ext moment side-channel at-least-node fill-range moment-timezone sigmund balanced-match finalhandler morgan signal-exit basic-auth forwarded ms simple-update-notifier bcrypt fresh multer sqlstring bignumber.js fs-extra mysql statuses binary-extensions fs-minipass mysql2 streamsearch bluebird fs.realpath named-placeholders string-width body-parser function-bind negotiator string_decoder brace-expansion gauge next-tick strip-ansi braces generate-function node-addon-api supports-color buffer-from get-caller-file node-fetch supports-preserve-symlinks-flag busboy get-intrinsic nodemon tar bytes glob nopt timers-ext call-bind glob-parent normalize-path to-regex-range chokidar graceful-fs npmlog toidentifier chownr has object-assign toposort-class cli-color has-flag object-inspect touch cliui has-symbols on-finished tr46 color-convert has-unicode on-headers type color-name http-errors once type-is color-support https-proxy-agent parseurl typedarray commander iconv-lite passport uid-safe concat-map ignore-by-default passport-local umzug concat-stream inflection passport-strategy undefsafe config-chain inflight path-is-absolute universalify console-control-strings inherits path-parse unpipe content-disposition ini path-to-regexp util-deprecate content-type ipaddr.js pause utils-merge cookie is-binary-path pg-connection-string uuid cookie-parser is-core-module picomatch validator cookie-signature is-extglob process-nextick-args vary core-util-is is-fullwidth-code-point proto-list webidl-conversions cors is-glob proxy-addr whatwg-url d is-number pseudomap wide-align debug is-promise pstree.remy wkx delegates is-property qs wrap-ansi denque isarray random-bytes wrappy depd js-beautify range-parser xtend destroy jsonfile raw-body y18n detect-libc lodash readable-stream yallist dotenv long readdirp yargs dottie lru-cache require-directory yargs-parser editorconfig lru-queue resolve ee-first make-dir retry-as-promised emoji-regex media-typer rimraf ubuntu@ip-172-31-15-69:~/serverjs-nextproject/node_modules$ mysql-apt-config_0.8.13-1_all.deb, mysql, mysql2 다 잘 깔려 있는데 도대체 모가 문제일까요...ㅠㅠ
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
front pm2 에러
프론트로 sudo npx pm2 monit 하면 이런 에러가 뜨는데 PostCard에 문제가 있는걸까요? 지금 처음 데이터는 이런식으로 불러오고있습니다
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
[공유] Post 수정 취소 후 다시 수정시 이전 수정 값이 남아 있는 문제 해결
PostCardContent에서 취소 버튼을 클릭시 바로 onCancelUpdate()를 하게 되면 editText의 값이 리셋되지 않습니다.그래서 다시 수정 버튼을 클릭하면, TextArea에 postData가 보이는 것이 아닌, 이전에 수정을 하려다가 취소할 당시의 값이 남아있게 됩니다! (해당 내용은 제로초님 sleact 레파지토리에 pull request 하였습니다.) 취소 버튼 클릭시 editText를 리셋하고 onCancelUpdate를 실행할 함수를 만들어주면 됩니다!const onClickCancel = useCallback(() => { setEditText(postData); onCancelUpdate(); });<Button type="danger" onClick={onClickCancel}>취소</Button>
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
s3 연결하기 강의 중에
안녕하세요 제로초님 항상 질문에 빨리 답변 달아주셔서 감사합니다. 백엔드에 문제가 있는거 같은 pm2 monit은 아래와 같이 뜹니다 const express = require("express"); const session = require("express-session"); const cookieParser = require("cookie-parser"); const cors = require("cors"); const app = express(); const postRouter = require("./routes/post"); const userRouter = require("./routes/user"); const postsRouter = require("./routes/posts"); const hashtagRouter = require("./routes/hashtag"); const db = require("./models"); const passportConfig = require("./passport"); const passport = require("passport"); const dotenv = require("dotenv"); const morgan = require("morgan"); const path = require("path"); const hpp = require("hpp"); const helmet = require("helmet"); dotenv.config(); db.sequelize .sync() .then(() => { console.log("db 연결성공"); }) .catch(console.error); passportConfig(); //모드변경 if (process.env.NODE_ENV === "production") { app.use(morgan("combined")); app.use(hpp()); app.use(helmet({ contentSecurityPolicy: false })); app.use( cors({ origin: "http://sansbook.co.kr", credentials: true, }) ); } else { app.use(morgan("dev")); app.use( cors({ origin: true, credentials: true, }) ); } // app.use( // cors({ // origin: [ // "http://localhost:3000", // "http://sansbook.co.kr", // "http://43.200.92.114", // ], // credentials: true, // }) // ); app.use("/", express.static(path.join(__dirname, "uploads"))); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use( session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, domain: process.env.NODE_ENV === "production" && ".sansbook.co.kr", }, }) ); app.use(passport.initialize()); app.use(passport.session()); app.get("/", (req, res) => { res.send("hello express"); }); app.use("/posts", postsRouter); app.use("/post", postRouter); app.use("/user", userRouter); app.use("/hashtag", hashtagRouter); app.listen(80, () => { console.log("서버실행중!"); });
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
회원가입시 500 에러
{ "name": "sansbook-back", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "dev": "nodemon app", "start": "cross-env NODE_ENV=production pm2 start app.js" }, "author": "jangsan", "license": "ISC", "dependencies": { "bcrypt": "^5.1.0", "cookie-parser": "^1.4.6", "cors": "^2.8.5", "cross-env": "^7.0.3", "dotenv": "^16.0.3", "express": "^4.18.2", "express-session": "^1.17.3", "helmet": "^6.1.5", "hpp": "^0.2.3", "morgan": "^1.10.0", "multer": "^1.4.5-lts.1", "mysql2": "^3.2.0", "passport": "^0.6.0", "passport-local": "^1.0.0", "pm2": "^5.3.0", "sequelize": "^6.30.0", "sequelize-cli": "^6.6.0", "session": "^0.1.0" }, "devDependencies": { "nodemon": "^2.0.22" } } const express = require("express"); const session = require("express-session"); const cookieParser = require("cookie-parser"); const cors = require("cors"); const app = express(); const postRouter = require("./routes/post"); const userRouter = require("./routes/user"); const postsRouter = require("./routes/posts"); const hashtagRouter = require("./routes/hashtag"); const db = require("./models"); const passportConfig = require("./passport"); const passport = require("passport"); const dotenv = require("dotenv"); const morgan = require("morgan"); const path = require("path"); const hpp = require("hpp"); const helmet = require("helmet"); dotenv.config(); db.sequelize .sync() .then(() => { console.log("db 연결성공"); }) .catch(console.error); passportConfig(); //모드변경 if (process.env.NODE_ENV === "production") { app.use(morgan("combined")); app.use(hpp()); app.use(helmet()); } else { app.use(morgan("dev")); } app.use( cors({ origin: ["http://localhost:3000", "sansbook.com", "http://15.164.99.87"], credentials: true, }) ); app.use("/", express.static(path.join(__dirname, "uploads"))); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use( session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, }) ); app.use(passport.initialize()); app.use(passport.session()); app.get("/", (req, res) => { res.send("hello express"); }); app.use("/posts", postsRouter); app.use("/post", postRouter); app.use("/user", userRouter); app.use("/hashtag", hashtagRouter); app.listen(80, () => { console.log("서버실행중!"); }); 회원가입 할떄 마다 500에러가 나는데 프론트 문제인가요?
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
Aborting
git 저장소를 불러오는중에 Aborting떠서git reset --hard를 해도 계속 최신 커밋이 안뜹니다 ㅠㅠHEAD is now at 95de5ce Update: back start script계속 이게 뜨면서 pull해도 Aborting이 계속 나오네요 ㅠㅠ
- 미해결[리뉴얼] React로 NodeBird SNS 만들기
mysql_secure_installation 정책에 관해
제가 다른게시물 보고 https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04이거까지 했는데 계속 새로운 비밀번호 입력 하라고 뜨네요 ㅠㅠ이런 경우 어떻게 해야할까요 비밀번호도 보안수준에 맞게 했는데 계속 뜨네요 ㅠㅠ