项目地址
主要实现功能:
1.用户名密码登录
2.增删改查管理员发布的网页数据
具体小功能:
1.对用户名数据进行哈希加密(签名)
2.强制登录页面(重定向)
3.浏览器与服务器传输数据
图片
界面丑了点,当时主要把后台功能搭起来,功能基本齐全,后面会把界面做起来
登录界面
首页
发布信息
用户评价
项目结构:
/server.js
其功能是建服务器监听8080端口。
具体代码:
1 | var server=express(); |
各段代码作用如下:
1.解析请求数据
2.并发给请求方cookie,
3.声明调用的模板
4.路由功能,区分请求并转入相应界面
5.处理静态文件请求
/libs/common.js
该文件封装模板,其功能是将登录时的用户输入的用户名密码等数据用哈希算法加密(签名),让该数据不可见,避免他人获取用户名密码。
代码如下:
1
2
3
4
5
6
7
MD5_SUFFIX: '*****',
md5: function (str){
var obj=crypto.createHash('md5');
obj.update(str);
return obj.digest('hex');
其中,MD5_SUFFIX加在数据后面,再进行md5加密,该MD5_SUFFIX是自定义的数据的
/route/index.js
在服务器运行后,服务器一直监听8080端口,当有请求访问,首先对该用户的登录状态和请求进行判定,如果不是管理
员,就重定向返回登录界面。如果想访问其他页面,也不行,重定向回登录界面。只有当既是管理员,请求访问的又是
登录界面才对请求予以响应。
1 | //检查登录状态 |
如果已确定是管理员,就再来判定其访问请求。
1 | //根据不同http请求,转向不同页面 |
/route/login.js
那是怎么判断是否为管理员?
当管理员登录时,后台就拿着页面获取的用户名密码和数据库的进行比对,成功就给浏览器发session,不成功就不发,
判定管理员的时候就是看有没有session。
为什么不直接不直接用用户名密码验证,而要再加一个session?
session可以理解为cookie的加强版,具有生存期,可以控制用户在一定时间内免登陆。若采用用户名密码验证,那每
退一次,就得输入一次密码,这在实际操作中是很不方便的。
1 | if(data[0].password==password){ |
route和template
登录后,就对数据进行操作。route和template分别是存放js和静态文件的文件夹,文件夹内的js文件实现的功能相似,都是将页面和数据库连接起来,对数据进行增删改查的操作。就banners页面来说,其具体代码如下:
1 | //连接数据库 |
修改banner数据
1 | db.query(`SELECT * FROM banner_table WHERE id=${req.query.id}`, (err, data)=>{ |