中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

用ps怎樣做網(wǎng)站文字logo廣豐網(wǎng)站seo

用ps怎樣做網(wǎng)站文字logo,廣豐網(wǎng)站seo,什么網(wǎng)站做旅行計劃,推薦個臨汾做網(wǎng)站的1、Vue2 vue2主要功能包括登入、退出、用戶權(quán)限、表格的增刪改查、文件下載。 Vue2項目地址https://gitee.com/www6/finance1.git 2、node.js編寫后端接口 2.1、項目初始化 后端地址https://gitee.com/www6/finance-backend.git 創(chuàng)建項目 npm install -g koa-generator …

1、Vue2

vue2主要功能包括登入、退出、用戶權(quán)限、表格的增刪改查、文件下載。

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

創(chuàng)建項目

npm install -g koa-generator  //安裝koa-generator
koa2 創(chuàng)建項目名

在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);
};

響應(yīng)處理

// 響應(yīng)處理  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,};
};

創(chuàng)建成功之后,接著下一步。

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('當(dāng)前查詢參數(shù)沒有值,請查看',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) {// 調(diào)試logconsole.log(`${sql}==>${params}=數(shù)據(jù)=>${results}`);connection.release();// Handle error after the release.if (error) {console.log('db出現(xiàn)異常:',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,// 權(quán)限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已經(jīng)失效');// 解析token并存儲到ctx的上面, ctx.state 本次請求的共享數(shù)據(jù)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('用戶信息不存在,或者已經(jīng)被刪除');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.risenshineclean.com/news/30670.html

相關(guān)文章:

  • 個人怎么做貸款網(wǎng)站求購買鏈接
  • 網(wǎng)站權(quán)重高+做別的關(guān)鍵詞百度應(yīng)用下載安裝
  • 學(xué)做效果圖網(wǎng)站有哪些軟件有哪些網(wǎng)站建站方式有哪些
  • 有沒有做數(shù)學(xué)題掙錢的網(wǎng)站艾滋病多久可以查出來
  • 網(wǎng)站建設(shè)網(wǎng)站軟件有哪些方面深圳網(wǎng)站建設(shè)公司
  • 湖南住房和城鄉(xiāng)建設(shè)廳網(wǎng)站首頁優(yōu)化網(wǎng)站怎么真實點擊
  • 男女做a視頻網(wǎng)站seo1搬到哪里去了
  • wordpress 網(wǎng)站日志天門seo
  • 福建省住建廳建設(shè)網(wǎng)站競價培訓(xùn)班
  • 手機網(wǎng)站開發(fā)學(xué)習(xí)免費單頁網(wǎng)站在線制作
  • 可以用足球做的游戲視頻網(wǎng)站好的競價賬戶托管外包
  • 常規(guī)做網(wǎng)站要在工信部認(rèn)證嗎網(wǎng)站建立
  • 適合個人做的網(wǎng)站有哪些東西嗎百度權(quán)重批量查詢
  • 英語機構(gòu)網(wǎng)站建設(shè)方案足球進(jìn)球排行榜
  • 做網(wǎng)站的困難windows優(yōu)化大師會員兌換碼
  • 做網(wǎng)站學(xué)什么專業(yè)防惡意點擊軟件
  • 南寧網(wǎng)站建設(shè)設(shè)計制作今日最新抗疫數(shù)據(jù)
  • 做代購有哪些網(wǎng)站有哪些seo優(yōu)化培訓(xùn)課程
  • 做聊天網(wǎng)站的視頻教程怎么進(jìn)行網(wǎng)站關(guān)鍵詞優(yōu)化
  • wordpress主題如何修改seo優(yōu)化設(shè)計
  • 做網(wǎng)站需要注意的點抖音seo供應(yīng)商
  • 山西成寧做的網(wǎng)站運營推廣渠道有哪些
  • wordpress下載站源碼營銷推廣公司案例
  • 安徽建筑大學(xué)學(xué)工在線網(wǎng)站蘇州網(wǎng)站制作推廣
  • 廣西代理網(wǎng)站建設(shè)公司百度網(wǎng)址提交入口
  • 做網(wǎng)站建設(shè)站長工具櫻花
  • 甘肅網(wǎng)站建設(shè)制作商競價賬戶托管公司
  • 網(wǎng)站開發(fā)集成環(huán)境seo優(yōu)化工作怎么樣
  • 網(wǎng)站建設(shè)招標(biāo)評分標(biāo)準(zhǔn)福州網(wǎng)站制作推廣
  • wordpress的數(shù)據(jù)庫在那里關(guān)鍵詞優(yōu)化建議