프론트엔드 정복하기
Node_method 사전 (.) 본문
Schema & Model이란?)
-schema : 사용자 데이터 저장 조건 모음집
-model : 스키마를 감싸는 것
.pre ( ' 메소드1 ' , function(next) )
: 메소드1(또는 다른 무언가)을 실행하기 전에 function을 실행함.
.use ( cookieParser() )
: 위를 가져오다. 사용하다.
: 미들웨어 함수를 사용하게 해준다.
cookieParser같은 라이브러리 뿐만 아니라, 내가 지정한 어떤 함수를 미들웨어로 사용할 수 있게 해줌.
ex)
axios.post('/', body).use(MiddlewareFunc).then(res=>res)
.res.cookie
:cookie-parser를 설치함으로 인해 req.body처럼 바로 cookie를 활용 가능
.connect(URL)
: url 등을 연결하다.
.get ('/' , function(req, res) )
: http 메소드의 한 종류 (주로 데이터를 읽거나 검색할 때 사용)
: '/' ?) 미들웨어 함수가 적용되는 경로(라우트)
'/register'도 쓰인다. http 주소 뒤에 붙는 것이라 생각된다. ex. http://www.naver.com/register
: URL 뒤에 submit한 정보가 노출된다.
.get ('/', auth(미들웨어), function(req,res) )
.post ('/', function(req, res) )
: http 메소드의 한 종류 (주로 새로운 리소스를 생성할 때 사용)
: URL 뒤에 submit한 정보가 붙지 않아, 보안상 유리하다.
.send ( 'hello word!' )
: 전달함
.save ( function(err, userInfo) )
: 몽고DB method
: 저장함
: err : 저장이 실패할 경우 / 변수2: 그렇지 않을경우
***new instance와 짝꿍
ex) const A = new B (req.body)
A.save((err, doc)=>{})
: req.body를 [ B model ]의 형태로 A 변수에 정의한다.
위의 A 변수를 mongoDB에 save 한다.
★★ doc을 client로 보내고 싶다면?
: json({success:true, doc}) 형식으로 바로 보내는 것 x
: Agree.find({'_id':doc._id})
.exec((err, result)=>{
if(err) return res.send(err);
res.status(200).json({success:true, result})
})
(doc의 _id를 가지고, model에서 find해서 보내는거다.)
.status(200)
: 성공한 상태
.status(400)
: 에러가 있다.
.listen (port, function())
.Schema ({ 스키마 세트 })
.model ('모델명', 스키마)
.json
: json 형식
.urlencoded ({extended:true})
.then (function() )
.catch (function(err) )
req.body
: req.body는 body-parser로 인해 읽을 수 있는, 하나의 메서드다.
client에서 server로 axios할 때, 보낼 변수 명을 variable이라고 설정한다고 해서 req.variable로 읽는 것이 아니다.
무조건 req.body로 읽는 것이다.
: body-parser을 설치함으로 인해 req.body > 바로 req를 불러올 수 있는 것.
.genSalt (saltRounds, function(err,salt) )
: salt를 generate(생성)함
.isModified ('password')
: 1이 수정되면
.hash (user.password, salt, function(err,hash) )
: 암호화된 것을 저장함
user.comparePassword (req.body.password , function(err, isMatch) )
: 메소드 이름을 마음대로 해도 된다. 단, 연결되는 구문에서 메소드명만 동일화시켜주면 된다.
(개발자 본인이 만든 메소드임)
.methods.comparePassword = function(plainPassword, cb)
: comparePassword 메소드를 정의함
bcrypt.compare (plainPassword, this.password, function(err, isMatch) )
.generateToken ( function(err,user) )
: token을 생성함
methods.generateToken = function(cb)
: generateToken 메소드를 정의함
.cookie ( "쿠키명", user.token )
: 쿠키에 "쿠키명"으로 user.token을 저장함
jsonwebtoken.sign (user._id , 'secretToken' )
: 'secretToken'이라고 치면 user._id가 나온다.
.findByToken (token, function(err,user) )
: 토큰을 복호화(decode)해서 찾는다.
.statics.findByToken = function(token, cb)
: findByToken 메소드를 정의함
jsonwebtoken.verify (token, 'secretToken', function(err, decoded) )
: 사용자가 입력한 token(=req.token)과 secretToken(DB)이 일치하는지 확인한다.
.toHexString( )
:Return the ObjectID id as a 24 byte hex string representation
.diskStorage
: multer에서 제공하는 method / 저장 config를 정함
.ffprobe
: ffmpeg에서 제공하는 method / 파일의 metadata를 가져옴
ffmpeg(파일경로).on ('filenames', function(filenames){} )
: ffmpeg 제공 method / 파일 이름 생성
ffmpeg(파일경로).on ('end', function(){} )
: ffmpeg 제공 method / 모두 마친 후 무엇을 할지
ffmpeg(파일경로).on ('error', function(err){} )
: ffmpeg 제공 method / 에러가 나면?
ffmpeg(파일경로).screenshots( )
: ffmpeg 제공 method / screenshots 조건
(count (몇장 찍을까), folder(저장 경로), size(320x240), filename (%b : 확장자를 제외한 본래 파일 이름) )
.find( )
: 모든 객체 출력
.find( { 'name' : 'Kang' } )
: name이 'Kang'인 모든 객체
.find( { 'name' : 'Kang' }, { 'gender' : 0 } )
: 이름이 'Kang'인 모든 객체에서 'gender' 필드는 제외하고 출력함
(원하지 않는 필드를 제외하고 출력 => 필드명 : 0 or false 입력)
.find( { 'name' : 'Kang' } .sort { 'createDate' : -1 } )
정렬 메소드 sort
-{KEY : -1} : KEY에 대해 내림차순 정렬
-{KEY : 1} : KEY에 대해 오름차순 정렬
.findOne( )
: find('조건') 을 사용해 추출할 수 있는 배열의 가장 첫번재에 위치한 데이터 출력
.findOne ( { 'name1' : X1, 'name2' : X2 }, function(err,user) )
: 몽고DB에서 제공하는 method
: name1(=X1 data), name2(=X2 data)와 일치하는 것이 있는가?
.findOneAndUpdate ( {name1:X1} , {update시킬 내용} , function(err, user) )
.findOneAndUpdate ( {name1 : X1, name2 : X2 } , {update시킬 내용} , function(err, user) )
: user를 찾아서 그 데이터를 업데이트 시켜준다.
.findOneAndDelete ( {name1:X1} ) .exec((err,doc))
: name1을 찾아서 삭제함, update처럼 바로 뒤에 function이 오지는 않음. (exec는 success or err 정도의 func)
*데이터를 '정렬'하려면 'sort( )' 메서드 사용
.deleteOne( )
: 매칭되는 첫번째 도큐먼트만 지운다.
.deleteMany( )
: 매칭되는 모든 다큐먼트를 지운다.
.find()
: 모든 정보 가져오기 (괄호안이 비어있을 경우)
.populate ( 'writer' )
: writer가 다른 document의 ObjectId일 경우, 이를 실체 객체로 치환한다.
: 쉽게 말해서 writer의 User model 정보까지 모두 불러온다. (ref : 'User')
ex) writer의 User 정보 중 'image와 role'만 불러오고 싶다면, populate의 두번째 인자로 쓰면 된다.
: .populate( 'writer', 'image role' )
https://www.zerocho.com/category/MongoDB/post/59a66f8372262500184b5363
.exec ( func( err, item ) )
: then과 비슷한 의미 / 실행함수
: execute ; 실행하다
.find(One)( ).populate( 'writer' ).exec( (err, item) => )
: mongoose 함수 / 위와 같이 이어서 쓰기도 함
: 여기서 item > find, populate로 가져온 것
type : mongoose.Schema.Types.ObjectId
ref : 'User'
: MongoDB Schema 에 id 형태를 가짐.
: 해당 id가 User에서 가지는 모든 정보를 불러올 수 있다.
ex ) 위가 writer type이라고 한다면... >> writer.name, writer.email 등으로 불러올 수 있음
$in : x
: 주어진 배열 안에 속하는 값
: x와 일치하는 모든 값을 불러온다.
: mongoose 함수 / 배열 관련
>> 구독 userTo 정보를 불러올 때 사용함 (React_subscriptionPage 만들기 글)
ex) Video.find({writer:{$in: subscribedUser}})
subscribedUser에 속하는 정보가 여러 개 일 때,
각각 1개씩 대입하고 싶을 경우 $in을 사용한다.
'Node > Node_사전' 카테고리의 다른 글
Node_MongoDB 용어 정리 (0) | 2020.06.02 |
---|---|
Node_express와 Router (0) | 2020.06.02 |
Node_함수 사전 (0) | 2020.05.12 |