当前位置: 首页 > news >正文

成都网站建设 川icp备隆尧做网站

成都网站建设 川icp备,隆尧做网站,织梦网站首页内容,比分网站建设1、Vue2 vue2主要功能包括登入、退出、用户权限、表格的增删改查、文件下载。 Vue2项目地址https://gitee.com/www6/finance1.git 2、node.js编写后端接口 2.1、项目初始化 后端地址https://gitee.com/www6/finance-backend.git 创建项目 npm install -g koa-generator …

1、Vue2

vue2主要功能包括登入、退出、用户权限、表格的增删改查、文件下载。

Vue2项目地址icon-default.png?t=N7T8https://gitee.com/www6/finance1.git

2、node.js编写后端接口

2.1、项目初始化

后端地址icon-default.png?t=N7T8https://gitee.com/www6/finance-backend.git

创建项目

npm install -g koa-generator  //安装koa-generator
koa2 创建项目名

在utils/index.js封装token

var jwt = require('jsonwebtoken');
const { secret, tokenExpires } = require('../conf');exports.createToken = (user) => {return jwt.sign(user, secret, {expiresIn: tokenExpires,});
};exports.vertifyToken = (token) => {try {var decoed = jwt.verify(token, secret);} catch (e) {} finally {return decoed;}
};
exports.getUser = (token) => {return jwt.decode(token, secret);
};

响应处理

// 响应处理  app.js
app.context.success = function (data) {this.body = {code: 20000,data,};
};
app.context.faild = function (data) {this.body = {code: 102,data,};
};
app.context.tokenExpires = function (data) {this.body = {code: 603,data,};
};

创建成功之后,接着下一步。

2.2、建立Mysql链接

根目录新建models/db.js文件

var mysql = require('mysql');
const { db } = require('../conf');
var pool = mysql.createPool(db);exports.query = function(sql,params=[]) {if (!params) {console.log('当前查询参数没有值,请查看',params);}return new Promise((resolve,reject)=>{pool.getConnection(function (err, connection) {if (err) throw err; // not connected!// Use the connectionconnection.query(sql,params, function (error, results, fields) {// 调试logconsole.log(`${sql}==>${params}=数据=>${results}`);connection.release();// Handle error after the release.if (error) {console.log('db出现异常:',error)return reject(error)}resolve(results);// Don't use the connection here, it has been returned to the pool.});});});
}

根目录下新建conf.js文件

exports.db = {connectionLimit: 10,host: "localhost",user: "xxx",password: "xxx",database: "xxx",
};exports.secret = "xxx";exports.tokenExpires = 6000 * 3;exports.whiteList = ["/user/login", "/user/logout"];

2.3、登入

新建routes/user.js文件

const router = require('koa-router')()
const { doLogin} = require('../controllers/user');router.prefix('/user')
.post('/login',doLogin)module.exports = router

新建controllers/user.js文件

const {findUserByAccount} = require('../models/user');
const { createToken, vertifyToken, getUser } = require('../utils');exports.doLogin = async (ctx, next) => {let { account, password } = ctx.request.body;if (!account || !password) {return ctx.faild('必须传递用户名和密码');}const res = await findUserByAccount(account);if (res.length === 0) {return ctx.faild('用户名或者密码不存在');}let user = res[0];if (user.password != password) {return ctx.faild('用户名或者密码不存在');}const saveUser = {id: user.id,account: user.account,// 权限type: user.role_id,};// 生成tokenconst token = createToken(saveUser);ctx.success({token,});
};;

新建models/user.js文件

const { query } = require('../models/db');exports.findUserByAccount = account => query('select * from user where account = ?',[account]);

2.4、中间件处理

const { whiteList } = require('../conf');
const { vertifyToken, getUser } = require('../utils');exports.checkLogin = async (ctx, next) => {// 非登录、退出// 需要检查的if (!whiteList.includes(ctx.url)) {const { token } = ctx.headers;let tokenIndex = ctx.blackTokenList.indexOf(token);// 验证tokenif (!vertifyToken(token)) {// 弹出这个元素,不允许访问,重新获取tokenctx.blackTokenList.splice(tokenIndex, 1);return ctx.tokenExpires('无效token,请登录再试!');} else {// 黑名单: 退出后的tokenif (tokenIndex !== -1) return ctx.tokenExpires('token已经失效');// 解析token并存储到ctx的上面, ctx.state 本次请求的共享数据ctx.state.user = getUser(token);}}await next();
};
// app.js全局引入const { responseHandler, checkLogin } = require('./middlewares');
app.use(checkLogin);

2.5、用户详情

router.prefix('/user')
.get('/info',getInfo)exports.getInfo = async (ctx) => {const user = ctx.state.user;if (!user) return ctx.faild('用户信息获取失败!');const { id } = user;const res = await findUserById(id);const dbUser = res[0];if (!dbUser) return ctx.faild('用户信息不存在,或者已经被删除');ctx.success({info: '获取成功!',roles: [{ name: dbUser.role_name }],});
};exports.findUserById = id => query('select * from user where id = ?',[id]);

2.6、退出

router.prefix('/user')
.post('/logout',logout)// 退出后的token  在app.js全局添加
app.context.blackTokenList = [];exports.logout = async (ctx) => {ctx.blackTokenList.push(ctx.headers.token);return ctx.tokenExpires('退出成功');
};

http://www.dtcms.com/a/530839.html

相关文章:

  • 白云区建设局网站有人做家具网站中介吗
  • 网站建设费用包括哪些黄冈网站推广优化技巧
  • 网站项目的介绍上海助君网络科技有限公司
  • 经典网站模板网线制作机
  • 龙溪网站建设企业做网站推广我们是专业的
  • 校园网站建设培训网页设计模板素材网站大全
  • 如何查询一个网站是那家公司做的怎么制作图片表格
  • 镇江建站推广报价壁画网站建设
  • 广州专业的做网站公司东莞建设银行各网点营业时间查询
  • 上海沪港建设咨询有限公司网站怎样做网站seo
  • 宁乡电商网站建设价格为什么没人做同城购物网站
  • 如何建设内部网站阿里云网站备案好了 怎么建站
  • 微网站免费建站系统深圳产品设计培训机构
  • 建设手机网站价格设计本家装
  • 电子商务网站建设课后作业南昌推广软件
  • 上海高端做网站网站建设火凤凰
  • wordpress主题 外贸网站ida设计公司上海
  • visual制作网站开发58同城推广效果怎么样
  • 怎么做网店合肥关键词排名优化
  • 怎样保存网站资料做证据家装平台
  • 网站二维码怎么做个人网页内容需要哪些
  • 网站备案详细最新流程编写网站用什么语言
  • 网站开发的工作环境wordpress代码标识
  • 网站开发哪里好wordpress免费主题 开源
  • 手机网站建设报价免费h5页面制作app
  • 网站后台模板 php广州短视频拍摄公司
  • 北京人力资源网站wordpress分享查看内容
  • 外包网站建设做一个招聘信息的网站 用什么做网站的软件
  • 网站建设规范湛江建设网官方网站
  • 医院网站建设需求分析调研表做软欧的网站