node + mysql 编写接口 存储数据

1 server 结构目录

  2  app.js (body-parser,cors,mysql,jwt,jsonwebtoken 通过npm 下载就行)

// 引入包
const express = require('express')
const cors = require('cors')
const bodyParser = require('body-parser')
const router = require('./router.js')
const JWT = require('./token.js')
// const tokenFn = require('../src/utils//token')
// const { expressjwt: jwt } = require('express-jwt')
// const JWT = require('./token.js')
// 创建服务器
const app = express()

// 跨域
app.options('/*', function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With')
  res.sendStatus(200)
})

app.all('*', function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  next()
})

// 排除 login 相关的路由和接口
app.use((req, res, next) => {
  if (req.url.includes('login')) {
    next()
    return
  }
  // 获取token
  const token = req.headers.authorization?.split(' ')[1]
  if (token) {
    // 校验 token
    const payload = JWT.verifyToken(token)
    // console.log(payload)
    if (payload) {
      // 重新计算 token 过期时间
      const newToken = JWT.encryptionToken({ data: payload.data }, '6h')
      res.header('Authorization', newToken)
      next()
    } else {
      res.status(401).send({ errCode: -1, err: 'token 过期' })
    }
  } else {
    next()
  }
})

app.use(bodyParser.json({ limit: '50mb' })) // 解析json和urlendcoded格式数据
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }))
app.use(cors())
app.use(router)

app.listen(3005, () => {
  console.log('http://127.0.0.1:3005', '服务器启动成功')
})

3  db.js (引入 数据库  =>  数据库 要和你创建的数据库保持一致,数据库表根据自己需求进行创建表)

const mysql = require('mysql')

const db = mysql.createPool({
  host: '127.0.0.1', // 数据库ip地址
  user: 'root', // 数据库登录账号
  password: '123456', // 数据库密码
  database: 'wangyou'// 要操作的数据库
})
module.exports = db

4  router.js (后端路由模块,捕捉发起的那个请求)

const express = require('express')
const router = express.Router()

// 登录
const login = require('./serverApi/login.js')

// 更新用户数据
const updateUser = require('./serverApi/updateUser.js')

// 发送邮箱验证码
const sendEmail = require('./serverApi/sendemail.js')

// 验证邮箱验证码
const register = require('./serverApi/register.js')

// 更新用户密码
const updatePwd = require('./serverApi/updatePwd')

// 上传日记
const addDiary = require('./serverApi/addDiary')

// base64 上传日记图片
const upArticleImg = require('./serverApi/uploaderImg.js')

// 获取用户日记
const getUserDiary = require('./serverApi/getUserDiary')

// 删除用户日记
const deleteDiary = require('./serverApi/deleteDiary')

// 更新用户日记
const updateDiary = require('./serverApi/updateDiary')

// 获取 回收站 的日记
const getRecycleDiary = require('./serverApi/getRecycleDiary')

// 删除 回收站 的某个日记
const delRecycleDiary = require('./serverApi/delRecycleDiary')

// 恢复 回收站 的日记
const postRecycleDiary = require('./serverApi/postRecycleDiary')

// 删除 回收站 所有日记
const delRecycleAllDiary = require('./serverApi/delRecycleAllDiary')

router.post('/login', login.post)
router.put('/updateUser', updateUser.put)
router.post('/sendEmail', sendEmail.post)
router.post('/register', register.post)
router.post('/updatePwd', updatePwd.post)
router.post('/addDiary', addDiary.post)
router.post('/upArticleImg', upArticleImg.post)
router.get('/getUserDiary', getUserDiary.get)
router.delete('/delUserDiary', deleteDiary.delete)
router.post('/updateDiary', updateDiary.post)
router.get('/getRecycleDiary', getRecycleDiary.get)
router.delete('/delRecycleDiary', delRecycleDiary.delete)
router.post('/postRecycleDiary', postRecycleDiary.post)
router.delete('/delRecycleAllDiary', delRecycleAllDiary.delete)

module.exports = router

5 token.js (后端生成token / 解密token 的 方法  )

const jsonwebtoken = require('jsonwebtoken')
const signKey = 'wangyou2023'

const JWT = {
// 加密 token
  encryptionToken (data, expires) {
    // data 加密数据   signKey 密钥    expires 过期时间
    return jsonwebtoken.sign({ data }, signKey, { expiresIn: expires })
  },

  // 解密 token
  verifyToken (token) {
    try {
      return jsonwebtoken.verify(token, signKey)
    } catch (error) {
      return false
    }
  }
}
module.exports = JWT

6   登录接口 (以登录接口为例)

1. 后端 登录接口 逻辑

// 登录接口

const JWT = require('../token.js')
const db = require('../db')
exports.post = (req, res) => {
  const { email, password } = req.body // 将传递进来的数据保存

  const sql = `select * from users where email = "${email}" and password = "${password}"`
  db.query(sql, (err, data) => {
    if (err) { // 数据库语句执行失败
      return res.send('错误:' + err.sqlMessage)
    } else if (data.length < 1) { // 返回的值为空数组
      return res.send({ data: null, mes: '用户名或密码错误', status: 403 })
    } else {
      // console.log(data + '/')
      // 调用 生成 token 方法  6h 为 token 过期时间
      const token = JWT.encryptionToken({ data }, '6h')
      res.send({ data, status: 201, token: token })
    }
  })
}

2.前端封装的 登录接口 

// 登录接口
export const getLoginApi = ({ email, password }) =>
  request({
    url: 'http://116.205.180.109:3005/login',
    method: 'post',
    data: {
      email,
      password
    }
  })

3 前端发起请求接口 (先引入封装的 登录接口)

import { getLoginApi } from '@/api/index.js'

const { data: res } = await getLoginApi(this.user)
 console.log(res)

4. 查看数据响应 是否成功 (响应数据就是你在 后端登录接口 返回的 data,status,token)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值