阿毛Alex - 2021年3月31日
type: channel
link: https://alexmao.com/index.php/2021/03/31/
description: 生命不息，折腾不止
items: 前后端分离使用token的思路
items: Node/Express里如何封装一个方法？
items: Express连接mysql数据库

前后端分离使用token的思路
type: item
date: 2021-03-31T08:46:14+00:00
description: 前后端分离token登录的思路：1、首次登录时，后端服务器判断用户账号密码正确之后，根据用户id、用户名、定义好的秘钥、过期时间 生成 token ，返回给前端2、前端拿到后端返回的 token ,存储在 localStroage 里3、前端每次路由跳转， 判断 localStroage 有无 token ，没有则跳转到登录页，有则请求获取用户信息，改变登录状态4、每次请求接口，在 请求头里携带 token5、后端接口 判断 请求头有无 token，没有或者 token 过期，返回4016、前端得到 401 状态码，重定向 到登录页面本文来自CSDN

Node/Express里如何封装一个方法？
type: item
date: 2021-03-31T06:05:00+00:00
description: 本文我们要封装一个数据库连接方法，最开始这个方法是写在posts.js里的，现在要把这个方法写到dbconfig.js里，以便其它接口文件也可以进行调用。原始的posts.js代码如下：const express = require('express') const mongodb = require('mongodb') const router = express.Router() // 连接数据库并指定要操作的collection async function loadPostsCollection(){ const client = await mongodb.MongoClient.connect ('mongodb://localhost:27017', { useUnifiedTopology: true }) return client.db('dbname').collection('posts') } // 查询数据并发送给前端 router.get('/', async (req, res) => { const posts = await loadPostsCollection() res.send(await posts.find({}).toArray()) }) module.exports = router 之后我们要把loadPostsCollection()这个方法封装到../utils/dbconfig里，把这部分代码复制到文件里，并改成以下这样：const mongodb = require('mongodb') // 将'users'改成collectionName作为参数传进来 module.exports = async (collectionName) => { const client = await mongodb.MongoClient.connect ('mongodb://localhost:27017', { useUnifiedTopology: true }) return client.db('dbname').collection(collectionName) } 回到调用该方法的文件，将dbconfig作为一个方法引入进来。const loadCollection = require('../utils/dbconfig') 在使用的时候，首先定义好collectionName，之后可直接使用封装的方法。// 查询数据 const collectionName = 'posts' router.get('/', async (req, res) => { const posts = await loadCollection(collectionName) res.send(await posts.find({}).toArray()) }) 修改后的posts.js如下：const express = require('express') const loadCollection = require('../utils/dbconfig') const router = express.Router() const collectionName = 'posts' // 查询数据 router.get('/', async (req, res) => { const posts = await loadCollection(collectionName) res.send(await posts.find({}).toArray()) }) module.exports = router 完！这个是其中一种封装方法，其他的方法查看这里。

Express连接mysql数据库
type: item
date: 2021-03-31T04:57:49+00:00
description: 一般node都跟mongodb等nosql数据库连接，不过转型期间很多时候我们还得使用mysql数据库，以下是Express连接mysql数据库的方法。第一步：引入mysql包，然后新建一个dbconfig.js文件，内容如下：const mysql = require('mysql') module.exports = { sqlConnect: (sql, sqlArr, callBack) => { const pool = mysql.createPool({ connectionLimit: 10, host: 'localhost', database: 'dbname', user: 'username', password: 'password' }) pool.getConnection((err, conn) => { if (err) return console.log('连接失败') conn.query(sql, sqlArr, callBack) conn.release() }) } } 第二步：在需要使用数据库的地方，比如routes下面的文件，引入dbconfig.js，并准备相关参数，调用db.sqlConnect()方法来连接数据库即可。const express = require('express') const db = require('../utils/dbconfig') const router = express.Router() router.get('/', (req, res, next) => { const sql = 'SELECT * FROM user' const sqlArr = [] const callBack = (error, results, fields) => { if (error) throw error res.status(200).send(results) } db.sqlConnect(sql, sqlArr, callBack) }) module.exports = router 完结！