무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
선생님 리덕스를 사용하면 어떠한 부분이 좋은지 알 수 있을까요?
리덕스를 사용하면 어떠한 부분에서 이점이 있는지 궁금합니다 gpt는 관리하기 편하다고 하는데 아직 초보라서 체감이 안돼서 글 남겨요~
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
다음과 같은 에러들이 발생합니다.
강의 잘 보고 있습니다.다음과 같은 에러가 발생하여 문의드립니다.혹시 추가로 설치가 필요한 것들이 있는 것일까요?
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
14강 로그아웃 기능 구현시 postman에서 Cannot POST 오류가 뜹니다.
이거 왜 이런지 알 수 있을까요?? 경로 문제라는것 같은데 잘모르겠습니다...ㅜ
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
암호화관련 문제
알려주신대로 어찌어찌 수정을 해서 실행이 됐습니다!그런데 이번엔 암호화 관련해서 다음과 같은 오류가 생겨 질문 드립니다..Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:68:19) at Object.createHash (node:crypto:138:10) at module.exports (C:\Users\User\Documents\boiler-plate\client\node_modules\webpack\lib\util\createHash.js:135:53) at NormalModule._initBuildHash (C:\Users\User\Documents\boiler-plate\client\node_modules\webpack\lib\NormalModule.js:417:16) at handleParseError (C:\Users\User\Documents\boiler-plate\client\node_modules\webpack\lib\NormalModule.js:471:10) at C:\Users\User\Documents\boiler-plate\client\node_modules\webpack\lib\NormalModule.js:503:5 at C:\Users\User\Documents\boiler-plate\client\node_modules\webpack\lib\NormalModule.js:358:12 at C:\Users\User\Documents\boiler-plate\client\node_modules\loader-runner\lib\LoaderRunner.js:373:3 at iterateNormalLoaders (C:\Users\User\Documents\boiler-plate\client\node_modules\loader-runner\lib\LoaderRunner.js:214:10) at iterateNormalLoaders (C:\Users\User\Documents\boiler-plate\client\node_modules\loader-runner\lib\LoaderRunner.js:221:10) C:\Users\User\Documents\boiler-plate\client\node_modules\react-scripts\scripts\start.js:19 throw err; ^ Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:68:19) at Object.createHash (node:crypto:138:10) at module.exports (C:\Users\User\Documents\boiler-plate\client\node_modules\webpack\lib\util\createHash.js:135:53) at NormalModule._initBuildHash (C:\Users\User\Documents\boiler-plate\client\node_modules\webpack\lib\NormalModule.js:417:16) at C:\Users\User\Documents\boiler-plate\client\node_modules\webpack\lib\NormalModule.js:452:10 at C:\Users\User\Documents\boiler-plate\client\node_modules\webpack\lib\NormalModule.js:323:13 at C:\Users\User\Documents\boiler-plate\client\node_modules\loader-runner\lib\LoaderRunner.js:367:11 at C:\Users\User\Documents\boiler-plate\client\node_modules\loader-runner\lib\LoaderRunner.js:233:18 at context.callback (C:\Users\User\Documents\boiler-plate\client\node_modules\loader-runner\lib\LoaderRunner.js:111:13) at C:\Users\User\Documents\boiler-plate\client\node_modules\babel-loader\lib\index.js:59:103 { opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], library: 'digital envelope routines', reason: 'unsupported', code: 'ERR_OSSL_EVP_UNSUPPORTED' }
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
모듈 경로 관련 오류 index.js 모듈을 찾을 수 없다고 해서 수정을 했는데 이번엔 User를 못찾네요..
어제까진 잘 실행이 되었는데 갑자기 이러니까 당황스러워요..먼저Error: Cannot find module 'C:\Users\User\Documents\boiler-plate\index.js' at Module._resolveFilename (node:internal/modules/cjs/loader:1048:15) at Module._load (node:internal/modules/cjs/loader:901:27) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12) at node:internal/main/run_main_module:23:47 { code: 'MODULE_NOT_FOUND', requireStack: [] } Node.js v20.9.0 [nodemon] app crashed - waiting for file changes before starting...이런 에러가 떠서 package.json의 backend 쪽을"backend": "nodemon server/index.js"이렇게 수정했더니 이번엔Error: Cannot find module '../server/models/User' Require stack: - C:\Users\User\Documents\boiler-plate\server\middleware\auth.js - C:\Users\User\Documents\boiler-plate\server\index.js at Module._resolveFilename (node:internal/modules/cjs/loader:1048:15) at Module._load (node:internal/modules/cjs/loader:901:27) at Module.require (node:internal/modules/cjs/loader:1115:19) at require (node:internal/modules/helpers:130:18) at Object.<anonymous> (C:\Users\User\Documents\boiler-plate\server\middleware\auth.js:1:18) at Module._compile (node:internal/modules/cjs/loader:1241:14) at Module._extensions..js (node:internal/modules/cjs/loader:1295:10) at Module.load (node:internal/modules/cjs/loader:1091:32) at Module._load (node:internal/modules/cjs/loader:938:12) at Module.require (node:internal/modules/cjs/loader:1115:19) { code: 'MODULE_NOT_FOUND', requireStack: [ 'C:\\Users\\User\\Documents\\boiler-plate\\server\\middleware\\auth.js', 'C:\\Users\\User\\Documents\\boiler-plate\\server\\index.js' ] }이런 오류가 뜨네요.. 계속 찾아보는데 경로도 다 맞는 것 같은데 어디서 문제가 발생하고 어떻게 해결해야 하는 지를 모르겠어요..우선 혹시 몰라 package.json 전체 첨부 해놓겠습니다!그리고 강의는 21강 까지 들었습니다!{ "name": "boiler-plate", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node index.js", "backend": "nodemon server/index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "in-sik", "license": "ISC", "dependencies": { "bcrypt": "^5.1.1", "body-parser": "^1.20.2", "cookie-parser": "^1.4.6", "express": "^4.18.3", "index.js": "^0.0.3", "jsonwebtoken": "^9.0.2", "mongoose": "^8.2.1" }, "devDependencies": { "nodemon": "^3.1.0" } }
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
라우터에서 빈 화면 나오시는 분들
Switch 문이 버전 6에서 사라졌다고 하네요. Route에서 props로 element 보내는 방법을 사용해서 코드를 수정해보았습니다. 참고하시면 좋을 거 같아요. import { BrowserRouter as Router, Routes, Route } from "react-router-dom" import NavBar from "./components/views/NavBar/NavBar"; import Footer from "./components/views/Footer/Footer"; import LandingPage from "./components/views/LandingPage/LandingPage"; import LoginPage from "./components/views/LoginPage/LoginPage"; import RegisterPage from "./components/views/RegisterPage/RegisterPage"; function App() { return ( <> <NavBar /> <Router> <Routes> <Route path="/" element={<LandingPage />} /> <Route path="/login" element={<LoginPage />} /> <Route path="/register" element={<RegisterPage />} /> </Routes> </Router> <Footer /> </> ); } export default App;
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
[에러 해결] 콜백 관련 오류 나오시는 분들
promise chain 적용하여 코드를 변경했습니다. 참고하시면 좋을 거 같아요! // index.jsapp.post('/api/users/logout', auth, (req, res) => { User.findOneAndUpdate({ _id: req.user._id }, { token: "" }) .then(() => { return res.status(200).json({ logoutSuccess: true }); }) .catch((err) => { return res.status(400).json({ logoutSuccess: false, message: err.message }); }) })// auth.jsfunction auth(req, res, next) { // 쿠키에서 토큰 가져오기 const token = req.cookies.x_auth; console.log("token is ", token); // 토큰 복호화 및 유저 검색 User.findByToken(token) .then((user) => { if (!user) { throw new Error("유효하지 않은 토큰입니다."); } // 토큰과 유저정보를 다음 단계로 전달함. req.token = token; req.user = user; return next(); }) .catch((err) => { return res.status(401).json({ isAuth: false, message: err.message }); }) }// User.jsuserSchema.statics.findByToken = function(token) { const user = this; return util.promisify(jwt.verify)(token, 'secretToken') .then((decoded) => { console.log(decoded); return user.findOne({ "_id": decoded, "token": token }); }) .catch((err) => { console.log(err); throw new Error("유효하지 않은 토큰입니다."); }); }
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
[에러 해결] (function) no longer accepts a callback
이제는 promise chain이나 async await 문으로 콜백함수를 처리해야 하는 것으로 보입니다. 다음과 같이 코드를 수정해서 돌아가는 것을 확인했으니 활용하시면 좋을 것 같아요! // index.jsapp.post('/login', (req, res) => { // 이메일이 DB에 있는지 확인 User.findOne({ email: req.body.email }) .then (async (user) => { if (!user) { throw new Error("제공된 이메일에 해당하는 유저가 없습니다.") } // 비밀번호가 일치하는지 확인 const isMatch = await user.comparePassword(req.body.password); return { isMatch, user }; }) .then(({ isMatch, user }) => { console.log(isMatch); if (!isMatch) { throw new Error("비밀번호가 틀렸습니다.") } // 로그인 완료 return user.generateToken(); }) .then ((user) => { // 토큰 저장 (쿠키, localstorage ...) return res.cookie("x_auth", user.token) .status(200) .json({ loginSuccess: true, userId: user._id }); }) .catch ((err) => { console.log(err); return res.status(400).json({ loginSuccess: false, message: err.message }); }) }); // User.jsuserSchema.pre('save', function( next ) { // 비밀번호 암호화 const user = this; if(user.isModified('password')) { bcrypt.genSalt(10, function(err, salt) { if (err) { return next(err); } bcrypt.hash(user.password, salt, function(err, hash) { if (err) { return next(err); } user.password = hash; return next(); }); }); } else { return next(); } }); userSchema.methods.comparePassword = function(plainPassword) { // 암호화된 비밀번호와 같은지 체크 const user = this; return bcrypt.compare(plainPassword, this.password) } userSchema.methods.generateToken = function() { // jwt 생성 user = this; const token = jwt.sign(user._id.toJSON(), 'secretToken'); user.token = token; return user.save(); }
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
id도 잘 불러오는데 토큰이 삭제가 안됩니다 .......
index.js app.get('/api/users/logout', auth, (req,res)=>{ // Usermodel에서 id를 찾고 token을 지워줌 User.findOneAndUpdate({ _id: req.user._id }, { token: "" }) console.log(req.user._id) try{ return res.status(200).send({ success: true }) } catch(err){ return res.json({ success: false, err }); } })auth.js let auth = (req, res, next)=> { // 인증 처리를 하는 곳 // client 쿠키에서 토큰을 가져온다. let token= req.cookies.x_auth; // 토큰을 복호화 후 유저를 찾는다. User.findByToken(token, (err,user)=>{ if(err) throw err; if(!user) return res.json({ isAuth: false, error: true}) req.token= token; req.user= user; next(); })User.js userSchema.statics.findByToken= function(token, cb){ var user= this; //토큰 디코드 jwt.verify(token,'secretToken', function(err, decoded){ //유저 아이디를 이용하여 유저를 찾은 후 // 클라이언트에서 가져온 token과 DB에 보관된 TOKEN이 일치하는지 확인 user.findOne({"_id": decoded, "token": token}) .then((user)=>{ cb(null, user); }) .catch((err)=>{ return cb(err); }) }) }index.js / auth.js / User.js 첨부하겠습니다.도저히 왜 토큰이 DB에서 사라지지 않는지 궁금합니다 ㅠㅠ
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
예시 이메일 수정
안녕하세요 혹시 이 부분에서 이메일이 예시 이메일로 들어갔는데 수정하는 방법있나요
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
User 객체 와 mongoose.connect()의 연결에 대한 질문 입니다.
로그인 기능 까지 구현 하면서, 생긴 의문점이 생겼는데요.mongoose.connect() 함수를 사용해서 몽고 DB와 연결 이후, 몽고 DB와 User 객체와의 연결이 따로 설정하지는 않은 거 같은데, user.save() 함수 사용 시 해당 User 객체가 어떻게 몽고 DB에 연결이 되어서 회원가입이 되는지 또는 로그인이 되는지 궁금합니다.
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
post login model.findone() no longer accepts a callback
callback문법이 적용이 안되서 바꿔 성공했는데 좋은 코드인지는 모르겠습니다 참고 하실분은 참고해주세요app.post("/api/users/login", async (req, res) => { try { // 같은 이메일의 유저가 있는지 확인 const user = await User.findOne({ email: req.body.email }); if (!user) { return res.json({ loginSuccess: false, message: "제공된 이메일에 해당하는 유저가 없습니다.", }); } // 비밀번호 확인 const isMatch = await user.comparePassword(req.body.password); if (!isMatch) { return res.json({ loginSuccess: false, message: "비밀번호가 틀렸습니다.", }); } // 토큰 쿠키에 저장 const userdata = await user.generateToken(); // 토큰을 저장한다. 어디에? 쿠키, 로컬스토리지 res .cookie("x_auth", userdata.token) .status(200) .json({ loginSuccess: true, userId: userdata._id }); } catch (err) { return res.status(400).send(err); } }); userSchema.methods.comparePassword = function (plainPassword) { // plainpassword와 db에 암호화된 비밀번호가 같은지 확인 const result = bcrypt.compare(plainPassword, this.password); return result; }; userSchema.methods.generateToken = async function (cb) { var user = this; // jsonwebtoken을 이용해서 token을 생성하기 var token = jwt.sign(user._id.toHexString(), "secretToken"); // user._id(db의 _id) + secreToken = token // token으로 user를 판별할 수 있다. // user.token = token; user.token = token; try { const savedUser = await user.save(); return user; } catch (err) { return err; } };
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
model.findone() no longer accepts a callback
더이상 저 문법을 지원하지 않는다고 해서 이것저것 코드 수정해 봤는데...비밀번호가 일치해도 일치한다는 메세지가 포스트맨에 나오지 않고에러도 뜨고 있습니다[에러 메세지] cb(null, isMatch); ^TypeError: cb is not a function at C:\Users\wwww\Documents\boiler-plate\models\User.js:69:5 index.js와 user.js를 첨부합니다 혹시 해결방법을 알 수 있을까요?// http://localhost:5000/ const express = require("express"); const app = express(); const port = 5000; const bodyParser = require("body-parser"); const cookieParser = require("cookie-parser"); const config = require("./config/key"); const { User } = require("./models/User"); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(cookieParser()); const mongoose = require("mongoose"); mongoose .connect(config.mongoURI) .then(() => console.log("MongoDB Connected...")) .catch((err) => console.log(err)); app.get("/", (req, res) => { res.send("Hello World!~~안녕 새해복"); }); app.post("/register", async (req, res) => { try { const user = new User(req.body); await user.save(); return res.status(200).json({ success: true, }); } catch (err) { return res.json({ success: false, err: err.message, }); } }); app.post("/api/users/login", async (req, res) => { try { // 요청된 이메일을 데이터베이스에서 찾기 const user = await User.findOne({ email: req.body.email }); if (!user) { return res.json({ loginSuccess: false, message: "제공된 이메일에 해당하는 유저가 없습니다.", }); } const isMatch = await user.comparePassword(req.body.password); if (!isMatch) { return res.json({ loginSuccess: false, message: "비밀번호가 틀렸습니다.", }); } // 비밀번호가 일치하면 토큰 생성 const userWithToken = await user.generateToken(); // 토큰 저장 res .cookie("x_auth", userWithToken.token) .status(200) .json({ loginSuccess: true, userId: userWithToken._id }); } catch (err) { return res.status(400).send(err); } }); app.listen(port, () => { console.log(`Example app listening on port ${port}`); }); const mongoose = require("mongoose"); // 몽구스 모듈을 가져와 몽고DB와 연결 const bcrypt = require("bcrypt"); const saltRounds = 10; const jwt = require("jsonwebtoken"); // 몽구스를 이용해 스키마 생성(필드들 작성) const userSchema = mongoose.Schema({ name: { type: String, maxlength: 50, }, email: { type: String, trim: true, unique: true, }, password: { type: String, minlength: 5, maxlength: 100, }, lastname: { type: String, maxlength: 50, }, role: { type: Number, default: 0, }, image: String, token: { type: String, }, tokenExp: { type: Number, }, }); userSchema.pre("save", function (next) { var user = this; if (user.isModified("password")) { bcrypt.genSalt(saltRounds, function (err, salt) { if (err) return next(err); bcrypt.hash(user.password, salt, function (err, hash) { if (err) return next(err); user.password = hash; next(); }); }); } else { next(); } }); // comparePassword userSchema.methods.comparePassword = function (PlainPassword, cb) { bcrypt.compare(PlainPassword, this.password, function (err, isMatch) { if (err) return cb(err); cb(null, isMatch); }); }; userSchema.methods.generateToken = function () { var user = this; return new Promise((resolve, reject) => { var token = jwt.sign(user._id.toHexString(), "secretToken"); user.token = token; user .save() .then((user) => resolve(user)) .catch((err) => reject(err)); }); }; const User = mongoose.model("User", userSchema); module.exports = { User };
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
깃허브 pathsec 오류
git init 후에 .gitignore 파일을 작성해서 git rm --cached node_modules 명령어를 입력했는데fatal: pathspec 'node_modules' did not match any files이런 오류가 뜹니다!
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
로그인 실패 ㅠㅠ
form에 email,password 입력 후 버튼을 누르면 다음과 같이 콘솔에 오류가 뜹니다.index.js app.post('/api/users/login',(req,res)=>{ User.findOne({email:req.body.email}) .then(user=>{ if(!user){ return res.json({ loginSuccess:false, message:"제공된 이메일에 해당하는 유저가 없습니다." }) } //만약 이 user에 해당 이메일을 갖고있는 user가 아예 없을경우 //요청한 이메일이 있다면 데이터 베이스에 있다면 비밀번호가 맞는 비밀번호 인지 확인. user.comparePassword(req.body.password,(err,isMatch)=>{ if(!isMatch) return res.json({loginSuccess:false, message:"비밀번호가 틀렸습니다"}) user.generateToken((err,user)=>{ if(err) return res.status(400).send(err); //token을 저장한다. 어디에? 쿠키에 보관. 로컬스토리지 res.cookie("x_auth",user.token) .status(200) .json({loginSuccess:true,userId:user._id}) }) }) //비밀번호 까지 맞다면 토큰 생성하기 }) .catch((err)=>{ return res.status(400).send(err); }) }) LoginPage.jsimport React,{useState} from 'react' //import axios from 'axios'; import {useDispatch} from 'react-redux'; import {loginUser } from '../../../_actions/user_action'; function LoginPage() { const dispatch = useDispatch(); const [email,setEmail]=useState(''); const [pwd,setPwd]=useState('') const onEmailHandler=(e)=>{ setEmail(e.target.value); } const onPwdHandler=(e)=>{ setPwd(e.target.value) } const onSubmitHandler=(e)=>{ e.preventDefault(); let body={ email:email, password:pwd } dispatch(loginUser(body)) } return ( <div style={{display:'flex', justifyContent:'center',alignItems:'center', width:'100%',height:'100vh' }}> <form style={{display:'flex',flexDirection:'column'}} onSubmit={onSubmitHandler}> <label>Email</label> <input type="email" value={email} onChange={onEmailHandler}/> <label>Password</label> <input type="password" value={pwd} onChange={onPwdHandler}/> <br/> <button>Login</button> </form> </div> ) } export default LoginPage;위 코드를 실행했더니 저렇게 오류내용이 나오면서 redux devtools로 보면 이렇게 axioserror 뜨네요,,어떻게 해결해야 할까요?
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
npm run dev 실행 시 emojis-list 관련 오류,,
위 파일이 client/index.js에 대한 코드입니다.루트 디렉토리에서 npm run dev를 실행시키면 밑 사진과 같은 오류가 뜹니다..node_modules, package.json 삭제 후 재설치도 해보고 client 디렉토리에서 npm install emojis-list도 해보고, npm uninstall emojis-list도 해보았지만 똑같은 오류가 떠서 페이지가 안열립니다..어떻게 해야 해결할 수 있을까요 ?
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
redux-thunk 관련 오류 !!
import React from 'react'; import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; import {Provider} from 'react-redux'; //import 'antd/dist/antd.css' import { applyMiddleware,createStore } from 'redux'; import promiseMiddleware from 'redux-promise'; import thunk from 'redux-thunk'; import Reducer from './_reducers' const createStoreWithMiddleware = applyMiddleware(promiseMiddleware,thunk)(createStore) const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <Provider store={createStoreWithMiddleware(Reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() )}> <App /> </Provider> ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals(); 위 코드 실행했더니 export 'default' (imported as 'thunk') was not found in 'redux-thunk' (possible exports: thunk, withExtraArgument) 이란 오류가 떠서 node_modules, package.json 폴더도 삭제하고 다시 npm install을 했음에도 똑같은 오류가 떠요 ㅠ
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
redux-thunk import error
Attempted import error: 'redux-thunk' does not contain a default export (imported as 'thunk').ERROR in ./src/index.js 16:69-74export 'default' (imported as 'thunk') was not found in 'redux-thunk' (possible exports: thunk, withExtraArgument) 이런 오류가 뜨는데 어떻게 해결해야하는걸까요?? import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; import { Provider } from 'react-redux'; import DatePicker from 'antd'; import { applyMiddleware, createStore } from 'redux'; import promiseMiddleware from 'redux-promise'; import thunk from 'redux-thunk' import Reducer from './_reducers'; const createStoreWithMiddleware = applyMiddleware(promiseMiddleware, thunk)(createStore) const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <Provider store={createStoreWithMiddleware(Reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() )}> <App /> </Provider> ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals();
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
새로운 계정으로 register 할 경우 발생하는 오류 ㅠㅠ
새로운 name,email,password로 http://localhost:3000/api/users/register에 post 요청하니까 다음과 같은 오류가 떠요 ㅠㅜ 이메일 부분도 unique: true로 해봤음에도 오류는 그대로네요.. 어떻게 해결할 수 있을까요? ( 전 3000번 포트로 설정해놓았어요){ "success": false, "err": { "index": 0, "code": 11000, "keyPattern": { "email": 1 }, "keyValue": { "email": null } } }
- 미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
#20 리액트 라우터 돔
라우터 돔 사이트에서 베이직이 안보이는데 어떤걸 복사하면되는건가요?