之前写了一篇 《Node.js中运用socket.io实现智能回复机器人与聊天室功能》 发现浏览的人还挺多,不过这篇博客只是讲解了一些实现原理,现在运用Node的Express框架给大家实现一下智能回复机器人。
首先是服务端的代码:
代码语言:javascript复制// 1.安装socket.io
// npm install socket.io/ 引入Express
var express = require('express');
// 创建服务
var app = express();
// 引入封装的mongoDB数据库,包含增、删、改、查功能
var DB = require('./module/db.js');
// 2.引入Http模块,传入express生成服务器
var server = require('http').Server(app);
// 3.引入sockit.io传入生成的服务器
var io = require('socket.io')(server);
// 使用Ejs模板引擎
app.set('view engine', 'ejs');
// 配置静态文件访问地址
app.use(express.static('public'));
// 添加首页路由
app.get('/', function (req, res) {
res.render('index');
})
// 监听端口
server.listen(8000, '192.168.0.3');
// 4.建立socket链接
io.on('connection', function (socket) {
// 5.监听客户端发送的消息
socket.on('message', function (data) {
var msg = data.msg || '';
// 6.数据库中模糊涂查询关键词
DB.find(
// 查询的表名
'article',
// 查询的条件
{ 'title': { $regex: new RegExp(msg) } },
// 返回哪一列
{ 'title': 1 },
// 回调函数
function (err, data) {
// 7.服务器返回数据给客户端
socket.emit('serverMessage', {
result: data
});
}
)
})
});
上面的代码中有引入一个封装的MongoDB数据库,大家可以参考一下 《Koa封装MongoDB数据库》里面的第二段代码的实现,这里代码就不做展示了,如果你用的是MySQL数据库也可以换成MySQL数据库。
代码语言:javascript复制<!DOCTYPE HTML>
<html>
<head>
<title>Express结合Socket.io实现智能回复机器人</title>
<script src="jquery-1.11.3.min.js"></script>
<!-- 1.引入socket.io.js文件 -->
<script src="http://192.168.0.3:8000/socket.io/socket.io.js"></script>
<!-- 样式省略-->
</head>
<body>
<div class="box">
<div class="list">
<div id="list"></div>
<div class="footer" id="footer"></div>
</div>
<div class="message">
<input type="text" id="msg" />
<input type="button" id="send" value="发送" />
</div>
</div>
</body>
</html>
<script>
$(function () {
// 2.与服务器建立链接
var socket = io.connect('http://192.168.0.3:8000/');
// 3.发送消息给服务端
$('#send').click(function () {
var msg = $('#msg').val();
socket.emit('message', msg);
$('#msg').val();
});
// 4.监听服务端返回的数据
socket.on('serverMessage', function (data) {
if (data.result.length) {
var str = '<ul>';
for (var i = 0; i < data.result.length; i ) {
str = '<li>' data.result[i].title '</li>';
};
str = '</ul>';
} else {
var str = '<p>没有找到您想要的数据,建议换个关键词试试</p>'
};
$('#list').append(str);
// 让内容区域滚动到浏览器窗口的可视区域内。
$('#footer').get(0).scrollIntoView();
});
})
</script>