js访问后台mysql_nodejs+mysql实现小型web后台程序

2022年05月11日 阅读数:2
这篇文章主要向大家介绍js访问后台mysql_nodejs+mysql实现小型web后台程序,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

主要实现功能:html

1.用户名密码登陆mysql

2.增删改查管理员发布的网页数据web

具体小功能:算法

1.对用户名数据进行哈希加密(签名)sql

2.强制登陆页面(重定向)数据库

3.浏览器与服务器传输数据express

图片浏览器

界面丑了点,当时主要把后台功能搭起来,功能基本齐全,后面会把界面作起来服务器

登陆界面cookie

c8d6d072018f06b19c9b75f02d9bbece.png

首页

f449ef682ab253e0b55af8fe6baf83fe.png

发布信息

e907d7e88e59629fcbe24d975da81367.png

用户评价

5533b82632c9003f0d3e8f8b1f91f6d2.png

项目结构:

b34a03340f99e732ec1415140347145a.png

/server.js

其功能是建服务器监听8080端口。

具体代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35var server=express();

server.listen(8080);

//1.获取请求数据

//get自带

server.use(bodyParser.urlencoded());

server.use(multerObj.any());

//2.cookie、session

server.use(cookieParser());

(function (){

var keys=[];

for(var i=0;i<100000;i++){

keys[i]='a_'+Math.random();

}

server.use(cookieSession({

name: 'sess_id',

keys: keys,

maxAge: 20*60*1000 //20min

}));

})();

//3.模板

server.engine('html', consolidate.ejs);

server.set('views', 'template');

server.set('view engine', 'html');

//4.route

server.use('/', require('./route/web')());

server.use('/admin/', require('./route/admin')());

//5.default:static

server.use(static('./static/'));

console.log('server is running at port 8080...');

各段代码做用以下:

1.解析请求数据

2.并发给请求方cookie,

3.声明调用的模板

4.路由功能,区分请求并转入相应界面

5.处理静态文件请求

/libs/common.js

该文件封装模板,其功能是将登陆时的用户输入的用户名密码等数据用哈希算法加密(签名),让该数据不可见,避免他人获取用户名密码。

代码以下:

1

2

3

4

5

6

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

2

3

4

5

6

7

8

9//检查登陆状态

router.use((req, res, next)=>{

if(!req.session['admin_id'] && req.url!='/login'){ //没有登陆

//转向登陆界面(重定向)

res.redirect('/admin/login');

}else{

next();

}

});

若是已肯定是管理员,就再来断定其访问请求。

1

2

3

4//根据不一样http请求,转向不一样页面

router.use('/login', require('./login')());

router.use('/banners', require('./banners')());

router.use('/custom',require('./custom')());

/route/login.js

那是怎么判断是否为管理员?

当管理员登陆时,后台就拿着页面获取的用户名密码和数据库的进行比对,成功就给浏览器发session,不成功就不发,

断定管理员的时候就是看有没有session。

为何不直接不直接用用户名密码验证,而要再加一个session?

session能够理解为cookie的增强版,具备生存期,能够控制用户在必定时间内免登录。若采用用户名密码验证,那每

退一次,就得输入一次密码,这在实际操做中是很不方便的。

1

2

3

4

5if(data[0].password==password){

//成功

req.session['admin_id']=data[0].ID;

res.redirect('/admin/');

}

route和template

登陆后,就对数据进行操做。route和template分别是存放js和静态文件的文件夹,文件夹内的js文件实现的功能类似,都是将页面和数据库链接起来,对数据进行增删改查的操做。就banners页面来讲,其具体代码以下:

1

2//链接数据库

var db=mysql.createPool({host: 'localhost', user: 'root', password: '***', database: 'learner'});

修改banner数据

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17db.query(`SELECT * FROM banner_table WHERE id=${req.query.id}`, (err, data)=>{

if(err){

console.error(err);

res.status(500).send('database error').end();

}else if(data.length==0){

res.status(404).send('data not found').end();

}else{

db.query('SELECT * FROM banner_table', (err, banners)=>{

if(err){

console.error(err);

res.status(500).send('database error').end();

}else{

res.render('admin/banners.ejs', {banners, mod_data: data[0]});

}

});

}

});

其余数据操做功能同理