mirror of
https://github.com/Daotin/Web.git
synced 2024-11-01 13:34:47 +08:00
142 lines
3.6 KiB
Markdown
142 lines
3.6 KiB
Markdown
这个聊天室的案例是:
|
||
|
||
填写用户名和发送的消息,点击发送按钮,就会在textarea中显示出来。
|
||
|
||
|
||
|
||
node后台:
|
||
|
||
```js
|
||
var http=require("http"); // 导入http.js文件
|
||
var msgList=[];
|
||
// 创建server服务
|
||
// req:接收前端的数据
|
||
// res:发送给前端的数据
|
||
var server=http.createServer(function (req,res) {
|
||
var data="";
|
||
// post请求接收数据的函数
|
||
// post接收到的数据就在函数的参数d里面
|
||
req.on("data",function (d) {
|
||
data+=d;
|
||
});
|
||
// get请求接收数据的函数
|
||
req.on("end",function () {
|
||
var obj=JSON.parse(decodeURIComponent(data));
|
||
if(obj.type===0){
|
||
delete obj.type;
|
||
msgList.push(obj);
|
||
}
|
||
res.writeHead(200,{"Access-Control-Allow-Origin":"*"});
|
||
res.write(encodeURIComponent(JSON.stringify(msgList)));
|
||
res.end();
|
||
})
|
||
});
|
||
// 地址 http://192.168.53.213:3002
|
||
server.listen(3002,"192.168.53.213",function () {
|
||
console.log("开启服务了");
|
||
});
|
||
|
||
```
|
||
|
||
|
||
|
||
前端代码:
|
||
|
||
```html
|
||
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<title>Title</title>
|
||
<style>
|
||
#names{
|
||
width: 120px;
|
||
|
||
}
|
||
#msgs{
|
||
width: 680px;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<textarea id="msgText" rows="30" cols="120"></textarea>
|
||
<br>
|
||
<input id="names" type="text">:
|
||
<input id="msgs" type="text">
|
||
<button id="bn">发送</button>
|
||
|
||
<script>
|
||
|
||
// 接口文档
|
||
// 1、
|
||
// req
|
||
// type=0
|
||
// user="xie"
|
||
// msg="聊天信息"
|
||
// res
|
||
// [
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// ]
|
||
|
||
// 2、实时获取聊天信息
|
||
// req
|
||
// type=1
|
||
// res
|
||
// [
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// {user:"xie",msg:"聊天信息"},
|
||
// ]
|
||
|
||
|
||
var msgText=document.querySelector("#msgText");
|
||
var names=document.querySelector("#names");
|
||
var msgs=document.querySelector("#msgs");
|
||
var bn=document.querySelector("#bn");
|
||
bn.addEventListener("click",clickHandler);
|
||
|
||
function clickHandler(e) {
|
||
// 判断输入的姓名和留言信息是否为空
|
||
if(names.value.trim().length===0 || msgs.value.trim().length===0)return;
|
||
// type为0是发送消息
|
||
ajax({type:0,user:names.value,msg:msgs.value});
|
||
}
|
||
function ajax(data) {
|
||
var xhr=new XMLHttpRequest();
|
||
xhr.addEventListener("load",loadHandlder);
|
||
xhr.open("POST","http://192.168.53.213:3002");
|
||
xhr.send(encodeURIComponent(JSON.stringify(data)));
|
||
}
|
||
|
||
function loadHandlder(e) {
|
||
var arr=JSON.parse(decodeURIComponent(this.response));
|
||
// 将服务器返回的消息进行格式处理,方便显示
|
||
arr=arr.map(function (item) {
|
||
return item.user+":"+item.msg;
|
||
});
|
||
//每条消息换行显示
|
||
msgText.value=arr.join("\n");
|
||
//设置滚动条一直在底部
|
||
msgText.scrollTop=msgText.scrollHeight;
|
||
}
|
||
|
||
// 每16ms向后台获取一次消息
|
||
setInterval(getMsg,16);
|
||
// type为1是获取消息
|
||
function getMsg() {
|
||
ajax({type:1});
|
||
}
|
||
</script>
|
||
</body>
|
||
</html>
|
||
|
||
|
||
```
|
||
|