• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

用node开发后端代码

武飞扬头像
小疯仔
帮助1

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();

学新通

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....');
})
学新通

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)
  })
})
学新通

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"] }))

在登录接口中使用生成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'})
    }
  })
})
学新通

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过期或者无效'
      })
    }
  });
})

还有后续…

这篇好文章是转载于:编程之路

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 编程之路
  • 本文地址: /boutique/detail/tanhhgackg
系列文章
更多 icon
同类精品
更多 icon
继续加载