-
글쓴이글
-
2023년 5월 11일 18:15 #82728
이지환참가자db를 mongoose를 활용해서 하는데 user.js에 메소드를 만들었는데 index에서 찾지를 못해요,.
------------------ ./models/User.js ------------------
<div>
<div>const mongoose = require('mongoose');</div>
<div>const bcrypt =require('bcrypt');</div>
<div>const saltRounds = 10 ; //10 자리인 salt를 만든다.</div>
<div>const myPlaintextPassword = 's0/\/\P4$$w0rD' ;</div>
<div>const someOtherPlaintextPassword = 'not_bacon' ;</div>
<div>var jwt = require('jsonwebtoken');</div>
<div>const UserSchema = mongoose.Schema({</div>
<div>name: {</div>
<div>type: String,</div>
<div>maxlength: 50</div>
<div>},</div>
<div>email: {</div>
<div>type: String,</div>
<div>trim: true,</div>
<div>unique: 1</div>
<div>},</div>
<div>password: {</div>
<div>type: String,</div>
<div>minlength: 5</div>
<div>},</div>
<div>lastname: {</div>
<div>type: String,</div>
<div>maxlength: 50</div>
<div>},</div>
<div>role: {</div>
<div>type: Number,</div>
<div>default: 0</div>
<div>},</div>
<div>image: String,</div>
<div>token: {</div>
<div>type: String</div>
<div>},</div>
<div>tokenExp:{</div>
<div>type: Number</div>
<div>}</div>
<div>})</div>
<div>UserSchema.methods.comparePassword = function(plainPassword,cd){</div>
<div>//입력한 패스워드와 암호화된 패스워드를 비교하기위해 입력한 패스워드도 dcript한다</div>
<div>bcrypt.compare(plainPassword,this.password,function(err,isMatch){</div>
<div>if(err) return cb(err),</div>
<div>cd(null,isMatch)</div>
<div>})</div>
<div>
</div>
<div>}</div>
<div>
</div>
<div>UserSchema.methods.makeToken = function(cb){</div>
<div>var user = this;</div>
<div>var token = jwt.sign(user._id, 'secreatToken');</div>
<div>// token = user._id+'secretToken'</div>
<div>// 'secretToken' -> user._id</div>
<div>
</div>
<div>user.token = token</div>
<div>user.save(function(err,user){</div>
<div>if(err) return cb(err)</div>
<div>cb(null,user)</div>
<div>})</div>
<div>}</div>
<div>UserSchema.pre('save',function(next){</div>
<div>var user = this;</div>
<div>//비밀번호를 암호화시킨다</div>
<div>if(user.isModified('password')){</div>
<div>bcrypt.genSalt(saltRounds,function(err,salt){</div>
<div>if(err) return next(err)</div>
<div>
</div>
<div>bcrypt.hash(user.password,salt,function(err,hash){</div>
<div>if(err) return next(err)</div>
<div>user.password = hash</div>
<div>next()</div>
<div>})</div>
<div>})</div>
<div>}else {</div>
<div>next()</div>
<div>}</div>
<div>})</div>
<div>const User = mongoose.model('User', UserSchema);</div>
<div>module.exports = {User};</div>
<div>------------------------------</div>
<div>index.js</div>
</div>
<div>------------------------------</div>
<div>const express = require("express") const app = express() const port = 8080
//bodyparser 이었지만 express에 내장되어서 이제 가능함 // app.use(express.urlencoded({extended: true})); //bodyparser 인데 app.json 형식으로 할땐 사용하니깐 일단 넣어둠 const bodyParser = require('body-parser'); //application/x-xxx-from-unlencoded 형식 파일 가져옴 app.use(bodyParser.urlencoded({extended: true})); //application/json 형식파일 가져옴 app.use(bodyParser.json()); //쿠키에 토큰저장 라이브러리 const cookieParser = require('cookie-parser'); app.use(cookieParser());
//user 가져옴 몽고 회원 데이터 정의 const {User} = require("./models/user"); const config =require('./config/key'); 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', (req, res)=> { //회원가입할 때 필요한 정보들을 클라이언트(크롬)에서 가져오면 //그것들을 데이터 베이스에 넣어준다. const user = new User(req.body); // 옛날방식이라 에러남 then(성공시)과 catch(실패시)문을 섞어줘야함 // user.save((err,userInfo) =>{ // if(err) return res.json({success : false,err}) // return res.status(200).json({ // success:true // }) // }) // }) user.save().then(()=>{ res.status(200).json({success:true}) console.log('저장완료 register'); }).catch((err)=>{ return res.json({success:false,err}) }) }); app.post('/login',(req, res) =>{ // 요청된 이메일을 데이터베이스 찾기 User.findOne({email:req.body.email}) .then((결과)=>{ if(!결과){ return console.log('이메일이 안맞음'); } else User.comparePassword(req.body.password, (err, isMatch) => { if(!err) return console.log('비밀번호안맞음') // Password가 일치하다면 토큰 생과 결과.makeToken((err, user)=>{ if(err) return console.log('토큰저장실패') // 토큰을 저장 else{ res.cookie("x_auth", user.token) .status(200) .json({loginSuccess: true, userId: user._id}) console.log('로그인성공')
} }) }) }) .catch((err)=>{ return console.log(err); }) })
// app.post('/login',(req, res) =>{ // // 요청된 이메일을 데이터베이스 찾기 // User.findOne({email: req.body.email}) // .then((isMatch)=>{ // User.comparePassword(req.body.password),function(err,isMatch){ // if(err) return console.log(err).log('findone에러'); // else if(!isMatch) return console.log("비밀번호가 맞지않음") // else { // res.cookie("x_auth", user.token) // .status(200) // .json({loginSuccess: true, userId: user._id}) // } // } // }) // .catch((err)=>console.log(err)); // })
// app.post('/login',(req,res)=>{ // const user = new User(req.body); // //요청된 이메일을 데이터베이스에서 찾는다 // user.findOne({email:req.body.email},(err,userInfo)=>{ // if(!userInfo){ // return res.json({ // loginSuccess : false, // message : "이메일에 해당하는 유저가 없습니다." // }) // } else { // //요청된이메일이 있으면 비밀번호데이터를 찾고 비밀번호가 맞는지 확인 // user.comparePassword(req.body.password,(err,isMatch)=>{ // if(!isMatch) return res.json({loginSuccess:false,message:"비밀번호가 틀렸습니다."})
// else{ // //비밀번호가 맞다면 토근을 생성하기 // user.makeToken((err,user)=>{ // if(err) return res.status(400).send(err); // //토큰을 쿠키나 로컬스토리지에 저장할 수 있는데 그걸 결정한다. // //일단 쿠키에다가 저장한다.(라이브러리 설치해야) // res.cookie("x_auth",user.token) // .status(200) // .json({loginSuccess:true, userId : user._id}) // })
// } // }) // }
// }) // })
//server open console log app.listen(port, () => { console.log(`B2B app listening on port ${port}`) })
</div>
-
글쓴이글
- 답변은 로그인 후 가능합니다.