期末大作业05

处理用户输入用户名或密码不正确的情况:

开始的写法会产生alert和重定向冲突:

var tpl = '<script language=javascript>alert("用户名或密码不正确")</script>'; 
res.send(tpl); 
res.redirect("/");

修改为:

var tpl = '<script language=javascript>alert("用户名或密码不正确"); location.href="/";</script>'; 
res.send(tpl); 

输入错误的信息会弹出警告窗口并返回主界面:

为了记录用户注册、登录、查询等操作,设计log表如下:

 

 记录用户登陆的代码:

connection.query('insert into log(name,action,content,date) VALUES(?,?,?,?)', [myUser.name, 'SIGNIN', req.ip, myDate.toLocaleString()], function (qerr, vals, fields) {
    if (qerr) {
	    console.error(`用户行为数据库查询失败-${qerr}`);
	    return;
    }
});

用户登陆成功后的数据库:

记录用户注册的代码: 

var myDate = new Date();
connection.query('insert into log(name,action,content,date) VALUES(?,?,?,?)', [req.query.name, 'REGISTER', req.ip, myDate.toLocaleString()], function (qerr, vals, fields) {
	if (qerr) {
		console.error(`用户行为数据库查询失败-${qerr}`);
		return;
	}
});

用户lll注册后的数据库:

 

 查看用户操作记录和管理用户在/manage路由下实现:

server.get('/manage', function (req, res) {
	let body = $.html();
    res.writeHead(200, { 'Content-type': 'text/html' });
    res.end(body);
});

这里的$是myCheerio.load(fs.readFileSync("./html/log.html"));

log.html代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>用户信息</title>
        <script>
            function StopUser() {
                document.getElementById("stop-form").submit();
            }
            function StartUser() {
                document.getElementById("start-form").submit();
            }
        </script>
    </head>
    <body>
        <form id="stop-form" action="/stopuser" method="get">
            <div class="search bar2">
                <input type="text" name="name" id="stopuser" placeholder="请输入要停用的用户">
                <input type="button" value="确定" onclick="StopUser()">
            </div>
        </form>
        </br>
        <form id="start-form" action="/startuser" method="get">
            <div class="search bar2">
                <input type="text" name="name" id="startuser" placeholder="请输入要启用的用户">
                <input type="button" value="确定" onclick="StartUser()">
            </div>
        </form>
        <table border="8" >
        </table>
    </body>
</html>

页面效果是:

在第一个框内输入需要停用的用户名,提交表单后转到/stopuser路由下处理;

在第二个框内输入需要启用的用户名,提交表单后转到/startuser路由下处理;

表格用于展示用户操作信息。

表格的生成应当在所有路由外做,一开始我将下面这段代码放在了/manage路由下,导致加载一次网页就为表格增加一次数据库中的所有内容,与需求不符。

$("table").append(`<tr>
<td>序号</td>
<td>用户</td>
<td>操作</td>
<td>内容</td>
<td>时间</td>
</tr>`);

connection.query("SELECT * from log", function (qerr, vals, fields) {
    if (qerr) {
        console.error(`数据库查询失败-${qerr}`);
        return;
    }
    cnt = vals.length;
    for (var x = 0; x < cnt; ++x) {
        var sqlfetch = vals[x];
        $("table").append(`
        <tr id="line${x}">
            <td>${x}</td>
            <td>${sqlfetch.name}</a></td>
            <td>${sqlfetch.action}</td>
            <td>${sqlfetch.content}</td>
            <td>${sqlfetch.date}</td>
        </tr>
        `);
    }
});

在/startuser和/stopuser路由下,需要修改user表的state字段,0表示用户已被停用,1表示用户已被启用(可正常使用),修改成功后返回/manage路由。

server.get('/stopuser', function (req, res) {
	connection.query('update user set ? where name=?',[{state:0},req.query.name], function (qerr, vals, fields) {
		if (qerr) {
			console.error(`数据库查询失败-${qerr}`);
			return;
		}
		var tpl = '<script language=javascript>alert("停用该用户成功"); location.href="/manage";</script>'; 
        res.send(tpl);
	});
});
server.get('/startuser', function (req, res) {
	connection.query('update user set ? where name=?',[{state:1},req.query.name], function (qerr, vals, fields) {
		if (qerr) {
			console.error(`数据库查询失败-${qerr}`);
			return;
		}
		var tpl = '<script language=javascript>alert("启用该用户成功"); location.href="/manage";</script>'; 
        res.send(tpl);
	});
});

 效果如下:

 

由于用户有用户状态这一性质,考虑修改用户登陆的代码,使被停用账号的用户不能正常登陆。

if(vals[3]==0){
	var tpl = '<script language=javascript>alert("账号异常,请联系管理员"); location.href="/";</script>'; 
    res.send(tpl);
}

结果并没有达到预想的效果,尝试输出vals[3]得到:

是我晕了。。。vals是得到的一列数据,只有vals[0],应该判断vals[0].state的值:

if(vals[0].state==0){
	var tpl = '<script language=javascript>alert("账号异常,请联系管理员"); location.href="/";</script>'; 
    res.send(tpl);
}

 效果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值