vue+socket.io+express+mongodb 간단 한 다 중 방 온라인 채 팅 예제 실현

5987 단어 vueexpressmongodb
프로젝트 소개
주로 여러 사람 이 온라인 으로 여러 방 에서 단체 채 팅 을 하 는 작은 프로젝트 를 통 해 스 택 기술 의 결합 운용 을 연습 하 는 것 이다.
프로젝트 소스 코드:chat-vue-node
주요 기술:vue 2 온 가족 통+socket.io+node(express)+mongodb(mongoose)
환경 설정:node,mongodb 환경 설정 을 설치 해 야 합 니 다(참고:https://www.jb51.net/article/109449.htm).mongodb 데 이 터 를 관리 하기 위해 Robomogo 클 라 이언 트 를 설치 하 는 것 을 권장 합 니 다.
컴 파일 실행:
1.MongoDB 서 비 스 를 시작 하고 새 명령 행 창 1:

mongod
2.서버 노드 를 시작 합 니 다.새 명령 행 창 2:

cd server
node index.js
3.전단 vue 페이지 시작

cd client
cnpm install
npm run dev
그리고 브 라 우 저 여러 창 에서 localhost:8080 을 열 고 서로 다른 계 정 을 등록 하고 로그 인하 면 여러 사용자 가 여러 방 에서 온라인 채 팅 을 할 수 있 습 니 다.
주요 효과 미리 보기:

코드 디 렉 터 리 개관

|--chat-vue-node
  |--client        //      :   vue-cli          
  |--server        //      
    |--api.js       // express    mongoose    mongodb         
    |--db.js       //       、Schema    
    |--index.js      //         
    |--package.json
  .gitignore
  README.md
soeket.io 기초
soeket.io 가 이 프로젝트 에 사용 하 는 기본 기능 은 다음 과 같 습 니 다(자세 한 내용 은 GitHub 의 chatGroup.vue,server/index.js 두 파일 코드 를 보십시오).

//      
var socket = io.connect('http://localhost:8081')
//         
io.on('connection', function(socket){
 // ......
}

//            
socket.emit('joinToRoom', data)
//      
socket.on('joinToRoom', function (data) {
 // ......
 //          、    
 socket.join(roomGroupId)
 //       ,                
 io.sockets.in(roomGroupId).emit('joinToRoom', chat)
 io.sockets.in(roomGroupId).emit('updateGroupNumber', roomNum[roomGroupId])
}

//          
socket.emit('emitChat', chat)
//                  
socket.on('emitChat', function (data) {
 let roomGroupId = chat.chatToGroup
 //            
 socket.in(roomGroupId).emit('broadChat', chat)
})

데이터 구조 설계
주로 세 개의 데이터 구조 모델 이 있다.

//            
const accountSchema = new Schema({
 account: {type: Number},  //     
 nickName: {type: String},  //     
 pass: {type: Number},    //   
 regTime: {type: Number}   //     
})
//           :        
const relationSchema = new Schema({
 groupAccount: Number,    //    
 groupNickName: String,   //    
 groupNumber: []       //    
})
//             
const groupSchema = new Schema({
 account: Number,      //       
 nickName: String,      //       
 chatTime: Number,      //        
 chatMes: String,      //        
 chatToGroup: Number,    //         
 chatType: String      //     :   、   、   
})
vue-router 경로 설계
페이지 경로 의 전환 은 모두 전단 의 vue-router 에 의 해 처리 되 고 페이지 기능 이 적 으 며 완전 하 며 3 개 만 있 습 니 다.등록 로그 인 페이지,개인 센터 페이지,단체 채 팅 페이지 입 니 다.

routes: [
 // {path: '/', name: 'Hello', component: Hello},
 {path: '/', redirect: '/login', name: 'Hello', component: Hello},
 {path: '/login', name: 'Login', component: Login},
 {path: '/center', name: 'Center', component: Center},
 {path: '/chatGroup', name: 'ChatGroup', component: ChatGroup}
]
//     ,          :
router.push({ path: 'login' })
vuex 전역 상태
주로 vuex 를 통 해 개인 계 정의 로그 인 상태,현재 단체 채 팅 방 의 정 보 를 전역 적 으로 관리 합 니 다.

export default new Vuex.Store({
 state: {
  chatState: {
   account: null,
   nickName: null
  },
  groupState: null  //          
 },
 mutations: {
  updateChatState (state, obj) {
   state.chatState = obj
  },
  updateGroupState (state, obj) {
   state.groupState = obj
  }
 },
 actions: {
  updateChatState ({commit}, obj) {
   commit('updateChatState', obj)
  },
  updateGroupState ({commit}, obj) {
   commit('updateGroupState', obj)
  }
 },
 getters: {
  getChatState (state) {
   return state.chatState
  },
  getGroupState (state) {
   return state.groupState
  }
 }
})
전역 에서 state 를 업데이트 하고 state 를 가 져 옵 니 다:

//   
this.$store.dispatch('updateChatState', {account: null, nickName: null})
//   
this.$store.getters.getChatState
데이터베이스 인터페이스 api

module.exports = function (app) {
 app.all("*", function(req, res, next) {
  next()
 })
 // api login   
 app.get('/api/user/login', function (req, res) { // ... })
 // api register   
 app.get('/api/user/register', function (req, res) { // ... })
 // getAccountGroup         
 app.get('/api/user/getAccountGroup', function (req, res) { // ... })
 // getGroupNumber           
 app.get('/api/user/getGroupNumber', function (req, res) { // ... })
 // api getChatLog            
 app.get('/api/getChatLog', function (req, res) { // ... })
 app.get('*', function(req, res){
  res.end('404')
 })
}
더 자세 한 실현 은 소스 코드 를 보십시오chat-vue-node그 안에 개발 모색 시의 많은 주석 이 남아 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기