vue+socket.io+express+mongodb 간단 한 다 중 방 온라인 채 팅 예제 실현
주로 여러 사람 이 온라인 으로 여러 방 에서 단체 채 팅 을 하 는 작은 프로젝트 를 통 해 스 택 기술 의 결합 운용 을 연습 하 는 것 이다.
프로젝트 소스 코드: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그 안에 개발 모색 시의 많은 주석 이 남아 있 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.