简版网页聊天室
开发工具为vscode 文档目录结构如下
index页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./scripts/jquery-3.5.1.js"></script>
<script src="./scripts/bootstrap.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="./scripts/script.js"></script>
<link rel="stylesheet" href="./css/bootstrap.css">
<style>
html,
body {
margin: 0px;
padding: 0px;
height: 100%;
background-color: gainsboro;
overflow: hidden;
}
#loginbox {
width: 100%;
height: 200px;
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
}
h1 {
text-align: center;
}
.login {
width: 500px;
margin: 0 auto;
}
#chatbox {
height: 100%;
}
#top {
height: 60px;
width: 100%;
}
#content {
width: 100%;
height: 100%;
box-sizing: border-box;
padding-bottom: 40px;
overflow-y: auto;
}
#footer {
position: fixed;
bottom: 0;
left: 0;
height: 40px;
width: 100%;
box-sizing: border-box;
background-color: gainsboro;
padding: 2px 0;
}
.alert {
z-index: 100;
position: absolute;
top: 0;
left: 0;
width: 100%;
}
#chatinput {
margin-left: 10px;
font-size: 25px;
}
</style>
</head>
<body>
<div id="loginbox">
<h1>登录</h1>
<hr>
<div class="login">
<div class="form-horizontal">
<div class="form-group">
<label for="name" class="col-sm-3 control-label">用户名</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="name" placeholder="请输入用户名">
</div>
<label for="name" class="col-sm-3 control-label" id="errmsg"></label>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button type="button" class="btn btn-info btn-default" id="loginbutton">登录</button>
</div>
</div>
</div>
</div>
</div>
<div style="display: none;" id="chatbox">
<div class="alert alert-info alert-dismissible fade in" role="alert" id="myalert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
aria-hidden="true">×</span></button>
</div>
<div class="alert alert-info alert-dismissible fade in" role="alert" id="myalert1">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
aria-hidden="true">×</span></button>
<span></span>
</div>
<div id="top"></div>
<div id="content"></div>
<div id="footer">
<div class="row">
<div class="col-md-11">
<input type="text" placeholder="saying somgthing" class="form-control" id="chatinput">
</div>
<form action="" style="display: none;" id="resetform">
<input type="file" style="display: none" id="imginput">
</form>
<div class="col-md-1">
<button type="button" class="btn btn-primary" id="imgbutton">发送图片</button>
</div>
</div>
</div>
</div>
</body>
</html>
app.js
var express = require("express")
var app = express();
var server = require("http").Server(app);
var path = require("path")
var io = require("socket.io")(server)
var usersNum = 0
var users = []
server.listen(3000, function () {
console.log("server running at localhost:3000")
})
io.on("connection", function (socket) {
usersNum++
console.log(`当前有${usersNum}个用户连接上服务器了`)
socket.on("login", function (data) {
socket.username = data.username
for (var user of users) {
if (user.username == data.username) {
socket.emit("usernameErr", { err: "用户名已存在" })
socket.username = null
break;
}
}
if (socket.username) {
users.push({
username: data.username,
messages: [],
dataUrl:[]
})
io.emit("loginSuccess", data)
}
})
socket.on("sendMessage", function (data) {
for (var i = 0; i < users.length; i++) {
if (users[i].username == data.username) {
users[i].messages.push(data.msg)
io.emit("receiveMessage", data)
break;
}
}
})
socket.on("sendImg", function (data) {
for (var i = 0; i < users.length; i++) {
if (users[i].username == data.username) {
users[i].dataUrl.push(data.dataUrl)
io.emit("receiveImg", data)
break;
}
}
})
socket.on("disconnect", function () {
usersNum--;
console.log(`当前有${usersNum}个用户连接上服务器了`)
users.forEach(function (user, index) {
if (user.username == socket.username) {
users.splice(index, 1)
}
})
})
})
app.use("/", express.static(path.join(__dirname, "./public")))
script .js
var express = require("express")
var app = express();
var server = require("http").Server(app);
var path = require("path")
var io = require("socket.io")(server)
var usersNum = 0
var users = []
server.listen(3000, function () {
console.log("server running at localhost:3000")
})
io.on("connection", function (socket) {
usersNum++
console.log(`当前有${usersNum}个用户连接上服务器了`)
socket.on("login", function (data) {
socket.username = data.username
for (var user of users) {
if (user.username == data.username) {
socket.emit("usernameErr", { err: "用户名已存在" })
socket.username = null
break;
}
}
if (socket.username) {
users.push({
username: data.username,
messages: [],
dataUrl:[]
})
io.emit("loginSuccess", data)
}
})
socket.on("sendMessage", function (data) {
for (var i = 0; i < users.length; i++) {
if (users[i].username == data.username) {
users[i].messages.push(data.msg)
io.emit("receiveMessage", data)
break;
}
}
})
socket.on("sendImg", function (data) {
for (var i = 0; i < users.length; i++) {
if (users[i].username == data.username) {
users[i].dataUrl.push(data.dataUrl)
io.emit("receiveImg", data)
break;
}
}
})
socket.on("disconnect", function () {
usersNum--;
console.log(`当前有${usersNum}个用户连接上服务器了`)
users.forEach(function (user, index) {
if (user.username == socket.username) {
users.splice(index, 1)
}
})
})
})
app.use("/", express.static(path.join(__dirname, "./public")))