使用express-session实现登录效果
本文为后端练兵内容,重复造轮子,重复造轮子才能有经验,才能生出花来。
本次练兵,采用的是数据库保存账户密码,后端通过查数据库的方式,实现账号和密码的校验。
如果验证成功,将登陆状态保存在session上面,然后重定向首页。
如果session过期重定向到登陆页面。
前端登陆页面,访问路径/login
<div> <input type="text" id="username" placeholder="Search" name="username"> <input type="text" id='password' name="password" value="0"> </div> <button id="login">Submit</button> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script> // 可选地,上面的请求可以这样做 let btn = document.querySelector("#login") console.log(btn) btn.addEventListener('click', function () { let username = document.querySelector('#username').value let password = document.querySelector('#password').value axios.get('/users/login', { params: { username: username, password: password } }) .then(function (res) { if (res.data.status === 200) { alert('登录成功') location.href='/' } else{ alert('登录失败') } }) .catch(function (error) { console.log(error); }); }) </script>
后端路由
var express = require('express'); var router = express.Router(); var exec = require('../db/mysql') var exec = exec.exec /* GET users listing. */ router.get('/', function (req, res, next) { res.send('respond with a resource'); }); //登录校验接口 /users/login router.get('/login', function (req, res, next) { let name = req.query.username, pwd = req.query.password let sql = `select * from user where username='${name}' and password=${pwd}` exec(sql).then((result) => { if (result.length > 0) { req.session.islogin = 1 res.json({ status: 200, msg: '操作成功', result: [] }) } else { req.session.islogin = 0 res.json({ status: 500, msg: '查询失败', result: [] }) } }).catch((err) => { res.json({ status: 500, msg: '登录失败', result: [] }) }) }); module.exports = router;
数据库连接配置/db/mysql
var mysql = require('mysql'); var con = mysql.createConnection({ host: 'localhost', port: '3306', user: 'root', password: '123456', database: 'test' }); con.connect(); function exec(sql){ return new Promise((resolve,reject)=>{ con.query(sql,(err,result)=>{ if(err){ reject(err) return } console.log(result,'res') resolve(result) }) }) } module.exports={ exec }
数据库采用的mysql,账号和密码可以自行建表设计。
代码很粗糙,主要是效果。
我站在山顶看风景!下面是我的家乡!