基于爬虫结果的数据展示网站搭建(二)

基于爬虫结果的数据展示网站搭建(二)——后端

摘要

本节将介绍网站的后端开发。

项目要求

  • 基于第一个项目爬虫爬取的数据,完成数据展示网站。
  • 基本要求
    1.用户可注册登录网站,非注册用户不可登录查看数据
    2、用户注册、登录、查询等操作记入数据库中的日志
    3、爬虫数据查询结果列表支持分页和排序
    4、用Echarts或者D3实现3个以上的数据分析图表展示在网站中
    5、实现一个管理端界面,可以查看(查看用户的操作记录)和管理(停用启用)注册用户。
  • 扩展要求(非必须):
    1、实现对爬虫数据中文分词的查询
    2、实现查询结果按照主题词打分的排序
    3、用Elastic Search+Kibana展示爬虫的数据结果

register

  • 后端在接收到前端register界面传来的post请求后,解析出其中的username和password。随后在数据库的users表查询是否存在相同的username,如果已经存在则返回注册失败。
  • 注册成功后,首先在users表中插入用户记录,并同时记录日志。在ActionLogs表中插入一下注册信息。
router.post('/register', function (req, res) {
    var response = {}
    var name = req.body.name;
    // console.log(name);
    var password = req.body.passwd;
    // console.log(password);
    var fetchSql = "SELECT username FROM users WHERE username = $1;";
    var fetch_name_Sql_Params = [name];
    pgsql.query(fetchSql, fetch_name_Sql_Params, function (err, result) {
        if (err) {
            console.log(err);
            return;
        }
        if (result.rows[0] == null) {            //该username没有被注册过
            var AddSql = 'INSERT INTO users (uuid,username, password,authority)'
                + 'VALUES ($1, $2,$3,$4);';
            var newsAddSql_Params = [uuidv1(), name, password, 'true'];
            pgsql.query(AddSql, newsAddSql_Params, function (err, result) {
                if (err) {
                    response.status = "注册失败";
                    // console.log(response);
                    res.end(JSON.stringify(response));
                    return;
                } else {
                    var fetchInsertSql = 'INSERT INTO ActionLogs (username, action)' + 'VALUES ($1, $2);';
                    var fetchInsertSql_Params = [name, 'register'];
                    pgsql.query(fetchInsertSql, fetchInsertSql_Params, function (err, result) {
                        if (err) {
                            console.log(err);
                        }
                    })
                    response.status = "注册成功";
                    res.end(JSON.stringify(response));
                    return;
                }
            });
        } else {
            response.status = "该用户已经注册过";
            console.log(response);
            res.end(JSON.stringify(response));
            return
        }
    });
});

login

  • 与注册功能类似,后端首先判断用户名是否存在,如果存在则继续比较用户密码是否正确。反之,返回登录失败。
  • 由于users表中authority列存放的是一个bool值,用来确定用户是否仍有权限访问。如果该值为true则登录成功,反之失败。
  • 用户登录成功后,在ActionLogs表中插入一条日志记录。
router.post('/login', function (req, res) {
    var username = req.body.name;
    var password = req.body.passwd;
    var response = {};
    var fetchSql = "SELECT password,authority FROM users WHERE username =$1;";
    var fetch_name_Sql_Params = [username];
    pgsql.query(fetchSql, fetch_name_Sql_Params, function (err, result, fields) {
        if (err) {
            console.log(err);
            return;
        }
        if (result.rows[0] == null) {
            response.status = '该用户名没有被注册';
            // console.log(response);
            res.end(JSON.stringify(response));
            return;
        }
        passwd = result.rows[0].password;
        authority = result.rows[0].authority;
        if (password == passwd) {
            var fetchInsertSql = 'INSERT INTO ActionLogs (username, action)' + 'VALUES ($1, $2);';
            var fetchInsertSql_Params = [username, 'login'];
            pgsql.query(fetchInsertSql, fetchInsertSql_Params, function (err, result) {
                if (err) {
                    console.log(err);
                }
            })
            if (authority) {
                response.status = '登录成功';
                res.cookie("username", username);
                res.end(JSON.stringify(response));
                return;
            }
            else {
                response.status = '该用户没有权限';
                // res.cookie("username", username);
                res.end(JSON.stringify(response));
                return;

            }
        } else {
            response.status = '密码错误';
            // console.log(response);
            res.end(JSON.stringify(response));
            return;
        }
    });
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值