• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 채팅방 유저의 _ID로 이름 찾아주기

채팅방 유저의 _ID로 이름 찾아주기

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 글쓴이
  • #44320

    오지훈
    참가자
    채팅 기능을 개발하는 과정에서
    채팅방의 채팅당한사람, 채팅을 건 사람의 정보가 _id로 저장을 하고 있는데,
    이 정보를 가져다 유저 정보에서 유저의 이름으로 바꿔주고 싶습니다.
    
    먼저 채팅방 정보를 몽고디비 메소드를 사용해서 결과값을 가져와 채팅 사용자의 _id를 가져오더라도
    then 내부의 콜백함수에 갇히다 보니 유저 이름을 찾기 위한 메소드로 결과값을 전달할 수 없더라구요.
    
    이럴경우 어떻게 해결할 수 있을까요?
    app.get 내부 첫번째 줄에 
    전역변수를 선언해서 넣으려고하니 promise pending으로 나오더라구요.
    #44339

    codingapple
    키 마스터
    바깥에 변수만들면 됩니다
    아니면 
    db.collection().어쩌구(function(){
      db.collection().어쩌구(function(){
      }
    }
    계속 중첩해서 쓰면 됩니다
    #44362

    오지훈
    참가자
    알려주신부분 참고하여 아래처럼 해결했습니다! 감사합니다!
    
    app.get('/chat', isLogin, (req, res) => {
    const findChatroom = {
    member: req.user._id
     }
    db.collection('chatroom').find(findChatroom).toArray()
     .then((chatRoom)=>{
    db.collection('login').find().toArray().then((userInfo)=>{
    chatRoom.forEach((v1)=> {
    userInfo.forEach((v2)=>{
    if( String(v1.member[0]) === String(v2._id) ){
    v1.member[0] = v2.id
    v1.member[1] = req.user.id
     }
     })
     })
    res.render('chat', { data : chatRoom })
     })
     })
    })
    
    바깥에 변수를 넣는 경우는 아래 코드처럼 몽고DB메소드 밖에서 선언한 변수에 
    몽고DB의 결과값을 넣고 몽고DB 메소드의 외부에서 사용하기 위해 이 변수를 console.log로 확인해보면 
    아무값도 들어있지 않더라구요. 이렇게 사용하는게 아닌가요?
    
    app.get('/chat', isLogin, (req, res) => {
    const findChatroom = {
    member: req.user._id
     }
    let value
    db.collection('chatroom').find(findChatroom).toArray()
     .then((chatRoom)=>{
    db.collection('login').find().toArray().then((userInfo)=>{
    value = userInfo
     })
     })
    console.log(value)
     })
    
    #44370

    codingapple
    키 마스터
    value = userInfo 바로 밑에서 출력해보면 들어있습니다 
    저기에 쓰면 console.log가 변수할당보다 먼저 실행됩니다
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠