使用nuxt,express,mysql,nginx创建个人博客系列-08
214
2020-01-24 18:37
10 个月前
用户注册和登陆
上一章节说到我们回调用 xx/api/createUser和xx/api/login的接口,那么我们要先到admin/routers/index.js目录添加路由规则。以下是添加的代码
import user from './user' // 引入user
router.use('/api', user) //路由经过/api的时候进入user处理,没有
在routers的目录创建user.js。目录是这样的:server/admin/routers/user.js,以下是代码
说明:以下引入的东西大家自行引入,自己写的模块我会说出来的
import {
Router
} from 'express'
const router = Router()
import util from '../../util' // 引入自定义的util
import mysql from '../../libs/mysql' // 引入自己写的mysql插件
import md5 from 'MD5'; // 引入md5~加密密码
router.post('/createUser', async (req, res, next) => {
let {
name,
password
} = req.body;
if (name && password) {
let searchUser = `select * from users where name = ?`;
let sql = `insert into users(name,password) values (?)`;
let mysqlCon = await mysql.getConnect();
let resultUser = await mysql.query(mysqlCon, searchUser, name);
if(resultUser.length){
//判断用户是否已经存在
let release = await mysql.release(mysqlCon)
return res.send(util.resError({
code:'name',
msg: '此用户已存在'
}))
}
let result = await mysql.query(mysqlCon, sql, [name, md5(md5(password))])
let release = await mysql.release(mysqlCon)
//判断是否插入成功
if (result.affectedRows !== 1) {
return res.send(util.resError({
msg: '插入失败'
}))
}
//设置session,把用户id和名字加上
req.session.user = {
id: result.insertId,
name: name
}
return res.send(util.resSuccess({
data: {
body: req.body,
sql: result
}
}))
}
return res.send(util.resError({
msg: '请输入名字和密码'
}))
})
router.post('/login',async (req, res, next) =>{
let {
name,
password
} = req.body;
if (name && password) {
let sql = `select * from users where name = ?`;
let mysqlCon = await mysql.getConnect();
let result = await mysql.query(mysqlCon, sql, name)
let release = await mysql.release(mysqlCon);
if(result.length){
//根据名字判断是否有这个用户
if(result[0]['password'] == md5(md5(password))){
//判断用户密码是否正确,然后把用户信息存到session
req.session.user = {
id: result[0].id,
name: name
}
return res.send(util.resSuccess({
data:{
name:result[0].name,
}
}))
}else{
return res.send(util.resError({
code:'password',
msg: '密码错误'
}))
}
}else{
return res.send(util.resError({
code:'name',
msg: '此人不存在'
}))
}
}
return res.send(util.resError({
msg: '请输入名字和密码'
}))
})
export default router;
上面的代码有用到了自己封装的mysql,和util。下面我把这两个文件放出来
文件目录:server/lib/mysql.js
import mysql from 'mysql'; //引入mysql模块
import config from '../config' //引入自定义配置,要往config里面添加mysql配置
/**
*这个代码是创建mysql连接池,池的概念大家自行搜索
*/
const pool = mysql.createPool({
connectionLimit: 50,
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
port: config.mysql.port,
database: config.mysql.database,
dateStrings:true,
multipleStatements: true //是否允许执行多条sql语句
}); //创建连接池
/**
*这个代码是从池里面获取连接,使用了promise,成功返回连接
*/
const getConnect = ()=>{
return new Promise((resolve,reject)=>{
pool.getConnection((err,connection)=>{
if(err) reject(err);
console.log('连接了')
resolve(connection)
})
})
}
/**
*这个代码是断开连接,参数是传入要断开的链接
*/
const release = (connection)=>{
return new Promise((resolve, reject) => {
if(!connection){
console.log('没有连接')
reject(false)
}
connection.release();
console.log('断了连接了')
resolve(true);
});
}
/**
*这个代码执行query方法,返回结果集。
*/
const query = (connection,sql,...params)=>{
return new Promise((resolve, reject)=>{
console.log(mysql.format(sql,params));
connection.query(sql,params,function(err,res){
if(err){
reject(err);
}
resolve(res);
})
})
}
export default {
getConnect,
release,
query
}
文件目录:server/config/index.js
添加mysql配置
export default{
//mysql 配置
"mysql":{
"host":"localhost",
"port":"3306",
"user":"root",
"password":"****",
"database":"blog"
},
//后台配置
"admin":{
"route":"/myadmin", //路由前置
"session":{ //session配合
"name":"mysession:s",
"secret":"***",
"maxAge":2500000,
"resave":false,//每次请求都会重新设置
"saveUninitialized" :false,//为空不保存
}
},
}
文件目录:server/util/index.js
export default {
codeDefault: {
data: {},
code: 0,
status: 1,
msg: ''
},
//返回失败代码
resError(opt) {
return {...this.codeDefault,status:0,...opt};
},
//返回成功代码
resSuccess(opt) {
return {...this.codeDefault,...opt}
},
}
现在可以注册和登录你的管理员了
注册页面,注册成功会自动跳转到首页,我在配置文件上配置路由地址是/myAdmin,所以进入的是http://127.0.0.1:3000/myAdmin/register
上一篇-使用nuxt,express,mysql,nginx创建个人博客系列-07
下一篇-使用nuxt,express,mysql,nginx创建个人博客系列-09