当前位置:   article > 正文

用node开发后端代码详解_node 后端

node 后端

1、cnpm init
2、cnpm install express mysql cors body-parser
3、创建config.js文件,连接数据库

// 引入mysql中间件
const mysql=require('mysql')
// 创建连接
let connection=mysql.createConnection({
  host:"xxx.xx.xx.xx",  //数据库主机名
  user:"root",// user 用户名
  password:"123456", // 密码
  port: 3306,   //端口号
  database:"db_****"  // 所连接的数据库名称
})

//连接数据库
connection.connect();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

4、创建http.js

//引入模块
const express=require('express');
const app=express();
const url=require('url')
const db=require('./config.js');
// 解决跨区域问题
// 导入中间件 cors
const cors = require('cors');
// 在路由之前调用app.use(cors())配置中间件
app.use(cors());
app.all("*",function(req,res,next){
 res.header("Acess-Control-Allow-Origin","*");
 next();
})
// 设置端口
app.listen(8888,function(){
  console.log('正在启动888....');
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

5、设置端口;在api文件夹终端打开 输入node http.js,测试是否设置成功
在这里插入图片描述

6、创建api目录index.js

//引入模块
const express = require('express');
const serve = require('../config.js');
const router = express.Router()
const mysql = require('mysql')
// 连接数据库
const conn = mysql.createConnection(serve.mysql)
conn.connect()
// 返回格式
const jsonWrite = function (res, ret, err) {
  if (err) return res.json({ code: -1, message: err.message })   // 返回错误
  if (typeof ret === 'undefined') {
    res.json({code: '-1',message: '操作失败'})
  } else {
    res.json({code: 1,data: ret,message: "success"})
  }
}
// 查询全部
router.get('/api/getData', (req, res) => {
  const sql = 'SELECT * FROM t_coach where status != 1';
  const params = req.query;
  conn.query(sql, params, (err, result) => {
    jsonWrite(res, result, err)
  })
})
// 查询详情
router.post('/api/getDetailsData', (req, res) => {
  const params = req.body;
  const sql = 'SELECT * FROM t_coach where c_id = ' + mysql.escape(params.c_id)
  conn.query(sql, (err, result) => {
    jsonWrite(res, result, err)
  })
})
// 添加
router.post('/api/addData', (req, res) => {
  const params = req.body;
  // const sql = 'INSERT INTO t_coach (c_name, c_level) values (' + mysql.escape([params.c_name, params.c_level]) + ")"
  const sql = 'INSERT INTO t_coach set ?' // 简易写法添加所有
  conn.query(sql, params,(err, result) => {
    jsonWrite(res, result, err)
  })

})
// 修改
router.post('/api/updateData', (req, res) => {
  const params = req.body;
  const sql = 'update t_coach set ? where c_id = ?'  // 简易写法根据查到的id进行修改数据
  conn.query(sql, [params, params.c_id], (err, result) => {
    jsonWrite(res, result, err)
  })
})
// 删除
router.post('/api/deleteData', (req, res) => {
  const params = req.body;
  // const sql = 'delete from t_coach where c_id =' + mysql.escape(params.c_id) //真删除有危险
  // 标记删除 status  执行删除的时候把该条数据的status 状态改为1,作为标记
  const sql ='update t_coach set status = 1 where c_id = ' + mysql.escape(params.c_id)
  conn.query(sql, (err, result) => {
    jsonWrite(res, result, err)
  })
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

7、安装jsonwebtoken 和express-jwt 进行验证 生成token
安装6.1.1的版本不会报expressJwt 错,但是要添加algorithms,使用 unless 放过一些不需要验证的接口

// 注册 JWT 字符串解析还原成 json 对象的中间件
const expressJwt = require('express-jwt')
const secretKey = 'iteheima No1 φ(* ̄0 ̄)' // 任意字节
app.use(expressJwt({ secret: secretKey, algorithms:['HS256'] }).unless({ path: ["/api/login"] }))
  • 1
  • 2
  • 3
  • 4

在登录接口中使用生成token

const jwt = require('jsonwebtoken')
// 为了保证 JWT 字符串的安全性,防止 JWT 字符串在网络传输过程中被别人破解,我们需要专门定义一个用于加密和解密 secret
// 当生成 JWT 字符的时候,需要使用secret密钥对用户的信息进行加密,最终得到加密好的 JWT 字符串
// 当把 JWT 字符申解析还原成JSON 对象的时候,需要使用secret密进行解密
router.post('/api/login', (req, res) => {
  const sql = 'SELECT * FROM user';
  const params = req.body;
  conn.query(sql, params, (err, result) => {
    const user = JSON.parse(JSON.stringify(result))[0]
    if (params.username == user.username && params.password == user.password) {
      // 登陆成功之后,调用jwt.sign()方法生成jwt 字符串,并通过token属性发送给客户端
      // 参数1: 用户的信息对象
      // 参数2: 加密的秘钥 
      // 参数3: 配置对象,可以配置当前 token 的有效期
      const tokenKey = jwt.sign({ username: user.username }, secretKey, { expiresIn: '300s' })
      res.json({code: 1,message: 'success',token: tokenKey})
    } else {
      res.json({code: -1,message: 'err'})
    }
  })
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

8、验证token失效

app.use((err,req,res,next) => {
  // token过期或者无效
  const token = req.headers.authorization
  jwt.verify(token, secretKey ,(error, decoded) => {
    if (error) {
      // console.log("token过期或者无效")
      res.json({
        code: -2,
        message: 'token过期或者无效'
      })
    }
  });
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

还有后续…

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/164825?site
推荐阅读
相关标签
  

闽ICP备14008679号