当前位置: 首页 > 工具软件 > express.io > 使用案例 >

Express结合Socket.io实现智能回复机器人

许庆
2023-12-01

智能回复机器人的原理一般都是用户输入关键词,服务端通过关键词去数据库查询相应的内容返回给用户,内容是多种形式的,可以是文字,可以是图片,也可以是图文结合等等。

本文介绍运用Node的Express框架给大家实现一下智能回复机器人。

首先是服务端的代码:

// 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数据库。

<!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>

 类似资料: