实现后台管理接口

数据库的准备

第一步:打开phpstudy启动mysql服务器

在这里插入图片描述

第二步:在mysql中创建一个名为bignews1的数据库

在这里插入图片描述

第三步:利用以下sql语句在mysql中执行生成表和数据

在这里插入图片描述

代码如下:

/*
 Navicat MySQL Data Transfer

 Source Server         : local
 Source Server Type    : MySQL
 Source Server Version : 50714
 Source Host           : localhost:3306
 Source Schema         : bignews

 Target Server Type    : MySQL
 Target Server Version : 50714
 File Encoding         : 65001

 Date: 31/03/2021 08:01:33
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for articles
-- ----------------------------
DROP TABLE IF EXISTS `articles`;
CREATE TABLE `articles`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标题',
  `cover` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '封面图片路径',
  `date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '新闻发表日期',
  `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '新闻发表时间',
  `isDelete` tinyint(1) NOT NULL COMMENT '1:删除 0:未删除',
  `state` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '已发布还是未发布',
  `author` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '作者',
  `read` int(11) NULL DEFAULT NULL COMMENT '阅读次数',
  `categoryId` int(11) NULL DEFAULT NULL COMMENT '文章所属分类',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `categoryId`(`categoryId`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 224 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `articles` VALUES (223, '测试333', 'f5fccb36cfe5ce07ee2914763c40b1e5', '2020-12-15', '<p><span style="color: #e03e2d;"><strong>测试3333333333333</strong></span></p>', 1, '草稿', '管理员', 0, 3);

-- ----------------------------
-- Table structure for categories
-- ----------------------------
DROP TABLE IF EXISTS `categories`;
CREATE TABLE `categories`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文章分类id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分类名称',
  `slug` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分类别名',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `name`(`name`) USING BTREE,
  UNIQUE INDEX `slug`(`slug`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 23 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of categories
-- ----------------------------
INSERT INTO `categories` VALUES (1, '爱生活', '热爱生活');
INSERT INTO `categories` VALUES (2, '爱旅行', '热爱旅行');
INSERT INTO `categories` VALUES (3, '爱美食', '热爱美食');
INSERT INTO `categories` VALUES (4, '爱运动', '热爱运动');
INSERT INTO `categories` VALUES (5, '经济特区', '热爱经济');

-- ----------------------------
-- Table structure for comments
-- ----------------------------
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '评论信息id',
  `author` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '评论人',
  `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '评论内容',
  `date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '评论日期',
  `time` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '评论时间',
  `state` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '状态:已审核,待审核',
  `articleId` int(11) NULL DEFAULT NULL COMMENT '评论文章的id',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `articleId`(`articleId`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 8001 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `comments` VALUES (1, '唐磊', '业声又必应做马体听第它光九多件合自方大设改着象省是把即起计。', '2020-6-29', '05:02:11', '已拒绝', 223);

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
  `nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称',
  `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  `userPic` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户头像路径',
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (1, 'admin', '李思思', 'sisili@qq.com', 'eafdd8cbe73f3b048ebb2714c61a7b5e', '123456');
INSERT INTO `users` VALUES (2, 'ivan', 'dd', 'dd', 'dd', '1');
INSERT INTO `users` VALUES (3, 'test1', 'test1', 'test1@qq.com', 'http://127.0.0.1:3000/uploads/1617113030043.jpg', '123456');
INSERT INTO `users` VALUES (4, 'test2', 'test2', 'email@qq.com', 'http://127.0.0.1:3000/uploads/1617113030043.jpg', '4321');

SET FOREIGN_KEY_CHECKS = 1;

项目的结构准备

第一步:在码云中创建一个仓库名为:big-event-background-01

在这里插入图片描述

第二步:初始化big-event-background-01项目

  1. git命令 初始化: git init

  2. 推送项目到码云上:(只需要一个master分支)

    在这里插入图片描述

  3. 执行 npm install 完成项目初始化工作

    在这里插入图片描述

4.项目结构

--app.js
--util
--util/sql.js
--router
--router/account_router.js
--router/cate_router.js
--router/users_ruoter.js

编写代码 (固定写法)

第一步:先下载需要用到的包express cros mysql(命令:npm i express cors mysql jsonwebtoken multer express-jwt)

  • express
  • mysql
  • cors
  • jsonwebtoken
  • multer
  • express-jwt

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第二步:在util中的sql.js文件中写如下代码

// 创建数据库连接以及定义sql语句执行方法
module.exports = {
    query: function (sql, callback) {
      const mysql = require('mysql');
      const conn = mysql.createConnection({
        host     : 'localhost',   // 你要连接的数据库服务器的地址
        user     : 'root',        // 连接数据库服务器需要的用户名
        password : 'root',        // 连接数据库服务器需要的密码
        database : 'bignews1'      //你要连接的数据库的名字
      });
      conn.connect();
      // 完成增删改查
      conn.query(sql, callback);
      // 手动关闭连接
      conn.end();
    }
  }

第三步:在app.js中创建服务器

-------------------------------------------------------------------------
// 1.0 三行代码,创建express服务器并开启监听
const express = require("express")
const server = express()


// 1.0.1 开启监听
server.listen(3001, () => {
    console.log("您的服务器已经在3001端口就绪了");
  })
-------------------------------------------------------------------------

第四步:解决跨域的问题

// 1.0 三行代码,创建express服务器并开启监听
const express = require("express")
const server = express()
----------------------------------------------------------
// 2.0 开启cors跨域(解决跨域问题)
const cors = require('cors')
server.use(cors())
----------------------------------------------------------
// 1.0.1 开启监听
server.listen(3001, () => {
    console.log("您的服务器已经在3001端口就绪了");
  })

第五步:设置uploads为静态资源目录

// 1.0 三行代码,创建express服务器并开启监听
const express = require("express")
const server = express()

// 2.0 开启cros跨域
const cors = require('cors')
server.use(cors())
------------------------------------------------------------------------------
// 3.0 设置uploads为静态资源目录
server.use('/uploads',express.static('uploads'))
------------------------------------------------------------------------------
// 1.0.1 开启监听
server.listen(3001, () => {
    console.log("您的服务器已经在3001端口就绪了");
  })

第六步:设置express-jwt 第三方包用于token生成和验证**

// 1.0 三行代码,创建express服务器并开启监听
const express = require("express")
const server = express()

// 2.0 开启cors跨域
const cors = require('cors')
server.use(cors())

// 3.0 设置uploads为静态资源目录
server.use('/uploads',express.static('uploads'))
--------------------------------------------------------------------------------------------------
// 4.0 设置jwt
const jwt = require('express-jwt');
// app.use(jwt().unless());
// jwt() 用于解析token,并将 token 中保存的数据 赋值给 req.user
// unless() 约定某个接口不需要身份认证
server.use(jwt({
  secret: 'czh', // 生成token时的 钥匙,必须统一
  algorithms: ['HS256'] // 必填,加密算法,无需了解
}).unless({
  path: ['/api/login','/api/register', /^\/uploads\/.*/] // 除了这两个接口,其他都需要认证
}));
--------------------------------------------------------------------------------------------------
// 1.0.1 开启监听
server.listen(3002, () => {
    console.log("您的服务器已经在3002端口就绪了");
  })

说明:

  • - secret: "czh",   生成token时的 钥匙,必须统一
    
    - const token = "Bearer " + jwt.sign({ name: username }, "czh", { expiresIn: 2 * 60 * 60 });
    

    在这里插入图片描述

第七步:通过路由中间件来 加载不同的路由

// 1.0 三行代码,创建express服务器并开启监听
const express = require("express")
const server = express()

// 2.0 开启cors跨域
const cors = require('cors')
server.use(cors())
// 3.0 设置uploads为静态资源目录
// server.use('/uploads',express.static('uploads'))
server.use('/uploads',express.static('uploads'))

// 4.0 设置jwt
const jwt = require('express-jwt');
// app.use(jwt().unless());
// jwt() 用于解析token,并将 token 中保存的数据 赋值给 req.user
// unless() 约定某个接口不需要身份认证
server.use(jwt({
  secret: 'czh', // 生成token时的 钥匙,必须统一
  algorithms: ['HS256'] // 必填,加密算法,无需了解
}).unless({
  path: ['/api/login','/api/reguser', /^\/uploads\/.*/] // 除了这两个接口,其他都需要认证
}));
----------------------------------------------------------------------------------------------------------
// 5.0 通过路由中间件来 加载不同的路由
const userRouter = require('./router/users_ruoter')
const cateRouter = require('./router/cate_router')
const accountRouter = require('./router/account_router')
server.use('/api',accountRouter);
server.use('/my',userRouter);
server.use('/my/article',cateRouter);
----------------------------------------------------------------------------------------------------------
// 1.0.1 开启监听
server.listen(3002, () => {
    console.log("您的服务器已经在3002端口就绪了");
  })

第八步:错误处理中间件用来检查token合法性

// 1.0 三行代码,创建express服务器并开启监听
const express = require("express")
const server = express()

// 2.0 开启cors跨域
const cors = require('cors')
server.use(cors())
// 3.0 设置uploads为静态资源目录
// server.use('/uploads',express.static('uploads'))
server.use('/uploads',express.static('uploads'))

// 4.0 设置jwt
const jwt = require('express-jwt');
// app.use(jwt().unless());
// jwt() 用于解析token,并将 token 中保存的数据 赋值给 req.user
// unless() 约定某个接口不需要身份认证
server.use(jwt({
  secret: 'czh', // 生成token时的 钥匙,必须统一
  algorithms: ['HS256'] // 必填,加密算法,无需了解
}).unless({
  path: ['/api/login','/api/register', /^\/uploads\/.*/] // 除了这两个接口,其他都需要认证
}));

// 5.0 通过路由中间件来 加载不同的路由
const userRouter = require('./router/users_ruoter')
const cateRouter = require('./router/cate_router')
const accountRouter = require('./router/account_router')
server.use('/api',accountRouter);
server.use('/my',userRouter);
server.use('/my/article',cateRouter);
---------------------------------------------------------------------------------------------
// 6.0 错误处理中间件用来检查token合法性
server.use((err, req, res, next) => {
    console.log('有错误', err)
    if (err.name === 'UnauthorizedError') {
      // res.status(401).send('invalid token...');
      res.status(401).send({ code: 1, message: '身份认证失败!' });
    }
  });
---------------------------------------------------------------------------------------------
// 1.0.1 开启监听
server.listen(3002, () => {
    console.log("您的服务器已经在3002端口就绪了");
  })

第九步:初始化router文件夹里面的文件

2.初始化 router/account_router.js (用户注册登录)

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
// 普通post键值对
router.use(express.urlencoded());

module.exports = router;

2.初始化 router/cate_router.js (个人中心

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
// 普通post键值对
router.use(express.urlencoded());

module.exports = router;

3.初始化 router/user_router.js (获取文章分类列表

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
// 普通post键值对
router.use(express.urlencoded());

module.exports = router;

代码实现注册用户接口 /api/reguser

第一步:在router/account_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken')
// 普通post键值对
router.use(express.urlencoded());
--------------------------------------------------------------------------------------------------------------
// 注册接口
router.post('/reguser', (req, res) => {
    // 1.接收用户传递的参数
    // console.log(req.body);
    const { username, password } = req.body;

    // 查询
    const sqlStrSelect = `select username from users where username="${username}"`
    console.log(sqlStrSelect);
    conn.query(sqlStrSelect, (err, result) => {
        // console.log(err)
        // console.log(result)
        if (err) {
            res.json({ "status": 1, "message": "注册失败!" })
            return;
        }
        if (result.length > 0) {
            res.json({ "status": 1, "message": "注册失败!用户名已被占用" })
            return;
        }
        // 2.拼接sql
        const sqlStr = `insert into users (username,password) values("${username}","${password}")`
        // 3.执行sql操作数据库
        conn.query(sqlStr, (err, result) => {
            // console.log(err,result);
            if (err) {
                res.json({
                    code: 500,
                    msg: "服务器错误"
                })
                return;
            }
            res.json({ "status": 0, "message": "注册成功!" });
        })
    })
})
--------------------------------------------------------------------------------------------------------------
module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

代码实现登录用户接口 /api/login

第一步:在router/account_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken')
// 普通post键值对
router.use(express.urlencoded());

// 注册接口
router.post('/reguser', (req, res) => {
    // 1.接收用户传递的参数
    // console.log(req.body);
    const { username, password } = req.body;

    // 查询
    const sqlStrSelect = `select username from users where username="${username}"`
    console.log(sqlStrSelect);
    conn.query(sqlStrSelect, (err, result) => {
        // console.log(err)
        // console.log(result)
        if (err) {
            res.json({ "status": 1, "message": "注册失败!" })
            return;
        }
        if (result.length > 0) {
            res.json({ "status": 1, "message": "注册失败!用户名已被占用" })
            return;
        }
        // 2.拼接sql
        const sqlStr = `insert into users (username,password) values("${username}","${password}")`
        // 3.执行sql操作数据库
        conn.query(sqlStr, (err, result) => {
            // console.log(err,result);
            if (err) {
                res.json({
                    code: 500,
                    msg: "服务器错误"
                })
                return;
            }

            res.json({ "status": 0, "message": "注册成功!" });
        })
    })
})
--------------------------------------------------------------------------------------------------------------

// 登录接口
router.post('/login', (req, res) => {
    // 1.接收用户传递的参数
    console.log(req.body);
    const { username, password } = req.body;
    console.log(username);

    // 2.拼接sql
    const sqlSrtSelect = `select username,password from users where username="${username}" and password="${password}"`
    // console.log(sqlSrtSelect);
    conn.query(sqlSrtSelect, (err, result) => {
        // console.log(err);
        // console.log(result);
        // 3.执行sql操作数据库
        if (err) {
            res.json({ "status": 1, "message": "登录失败!" })
            return;
        }
        if (result.length > 0) {
            const token = "Bearer " + jwt.sign({ name: username }, "czh", { expiresIn: 2 * 60 * 60 });
            res.json({
                "status": 0, "message": "登录成功!", token
            })
            return;
        }  
        res.json({ "status": 1, "message": "登录失败!用户名密码错误" });
    })

})
--------------------------------------------------------------------------------------------------------------


module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

将注册及登录完成的接口推送到码云

在这里插入图片描述

获取用户的基本信息接口 /my/userinfo

第一步:在router/users_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');

// 普通post键值对
router.use(express.urlencoded());
-------------------------------------------------------------------------------------------------
// 1.获取用户的基本信息
router.get('/userinfo',(req,res)=>{
    console.log(req.query);
    const {username} = req.query;
    const sqlStrSelect = `select * from users where username="${username}" `
    conn.query(sqlStrSelect,(err,result)=>{
        // console.log(err);
        // console.log(result);
        if(err){
            res.json({ststua:1,message:"获取用户信息失败"});
            return;
        }
        res.json({
            status:0,
            message:"获取用户基本信息成功!",
            data:result,
        })
    })
})
-------------------------------------------------------------------------------------------------

module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

更新用户的基本信息 /my/userinfo

第一步:在router/users_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');

// 普通post键值对
router.use(express.urlencoded());

// 1.获取用户的基本信息
router.get('/userinfo',(req,res)=>{
    console.log(req.query);
    const {username} = req.query;
    const sqlStrSelect = `select * from users where username="${username}" `
    conn.query(sqlStrSelect,(err,result)=>{
        // console.log(err);
        // console.log(result);
        if(err){
            res.json({ststua:1,message:"获取用户信息失败"});
            return;
        }
        res.json({
            status:0,
            message:"获取用户基本信息成功!",
            data:result,
        })
       
    })
})

-------------------------------------------------------------------------------------------------

// 2.更新用户的基本信息
router.post('/userinfo',(req,res)=>{
    // console.log(req.body);
    const {username,password,nickname,email,userPic,id} = req.body;
    let condtion = []
	if(username){
		condtion.push(`username="${username}"`)
	}
	if(password){
		condtion.push(`password="${password}"`)
	}
	if(nickname){
		condtion.push(`nickname="${nickname}"`)
	}
	if(email){
		condtion.push(`email="${email}"`)
	}
	if(userPic){
		condtion.push(`userPic="${userPic}"`)
	}
    const conditionStr = condtion.join();
    const sqlStrSelect = `update users set ${conditionStr} where id="${id}"`
    console.log(sqlStrSelect);
    conn.query(sqlStrSelect,(err,result)=>{
        if(err){
            res.json({
                "status": 1, 
                "message": "修改用户信息失败!"
            })
        }
        res.json({
            "status": 0, 
            "message": "修改用户信息成功!"
        })
    })

})
-------------------------------------------------------------------------------------------------

module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

上传用户头像 /my/uploadPic

第一步:在router/users_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
---------------------------------------------------------------------------------------------------------------
// 文件上传
const multer = require('multer');
// 精细化去设置,如何去保存文件
const storage = multer.diskStorage({
	destination: function(req, file, cb) {
		cb(null, 'uploads');
	},
	// 保存是文件名叫什么
	filename: function(req, file, cb) {
		// console.log('file', file)
		const filenameArr = file.originalname.split('.');
		// 原来是什么名字,保存的就是什么名字
		// cb(null, file.originalname) 
		// 保存名为时间戳  length-1找到最后一个元素的下标
		const fileName = Date.now() + '.' + filenameArr[filenameArr.length - 1];
		cb(null, fileName)
	}
})
var upload = multer({
	storage
})
---------------------------------------------------------------------------------------------------------------
// 普通post键值对
router.use(express.urlencoded());

// 1.获取用户的基本信息
router.get('/userinfo',(req,res)=>{
    console.log(req.query);
    const {username} = req.query;
    const sqlStrSelect = `select * from users where username="${username}" `
    conn.query(sqlStrSelect,(err,result)=>{
        // console.log(err);
        // console.log(result);
        if(err){
            res.json({ststua:1,message:"获取用户信息失败"});
            return;
        }
        res.json({
            status:0,
            message:"获取用户基本信息成功!",
            data:result,
        })
       
    })
})


// 2.更新用户的基本信息
router.post('/userinfo',(req,res)=>{
    // console.log(req.body);
    const {username,password,nickname,email,userPic,id} = req.body;
    let condtion = []
	if(username){
		condtion.push(`username="${username}"`)
	}
	if(password){
		condtion.push(`password="${password}"`)
	}
	if(nickname){
		condtion.push(`nickname="${nickname}"`)
	}
	if(email){
		condtion.push(`email="${email}"`)
	}
	if(userPic){
		condtion.push(`userPic="${userPic}"`)
	}
    const conditionStr = condtion.join();
    const sqlStrSelect = `update users set ${conditionStr} where id="${id}"`
    console.log(sqlStrSelect);
    conn.query(sqlStrSelect,(err,result)=>{
        if(err){
            res.json({
                "status": 1, 
                "message": "修改用户信息失败!"
            })
        }
        res.json({
            "status": 0, 
            "message": "修改用户信息成功!"
        })
    })

})
---------------------------------------------------------------------------------------------------------------

// 3.上传用户头像
router.post('/uploadPic',upload.single('file_data'),(req,res)=>{
    console.log(req.file);
    res.json({
        "status": 0, 
        "message": "http://127.0.0.1:3002/uploads/" + req.file.filename
    })
})
---------------------------------------------------------------------------------------------------------------

module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

重置密码 /my/updatepwd

第一步:在router/users_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
// 文件上传
const multer = require('multer');
// 精细化去设置,如何去保存文件
const storage = multer.diskStorage({
	destination: function(req, file, cb) {
		cb(null, 'uploads');
	},
	// 保存是文件名叫什么
	filename: function(req, file, cb) {
		// console.log('file', file)
		const filenameArr = file.originalname.split('.');
		// 原来是什么名字,保存的就是什么名字
		// cb(null, file.originalname) 
		// 保存名为时间戳  length-1找到最后一个元素的下标
		const fileName = Date.now() + '.' + filenameArr[filenameArr.length - 1];
		cb(null, fileName)
	}
})
var upload = multer({
	storage
})
// 普通post键值对
router.use(express.urlencoded());

// 1.获取用户的基本信息
router.get('/userinfo',(req,res)=>{
    console.log(req.query);
    const {username} = req.query;
    const sqlStrSelect = `select * from users where username="${username}" `
    conn.query(sqlStrSelect,(err,result)=>{
        // console.log(err);
        // console.log(result);
        if(err){
            res.json({ststua:1,message:"获取用户信息失败"});
            return;
        }
        res.json({
            status:0,
            message:"获取用户基本信息成功!",
            data:result,
        })
       
    })
})


// 2.更新用户的基本信息
router.post('/userinfo',(req,res)=>{
    // console.log(req.body);
    const {username,password,nickname,email,userPic,id} = req.body;
    let condtion = []
	if(username){
		condtion.push(`username="${username}"`)
	}
	if(password){
		condtion.push(`password="${password}"`)
	}
	if(nickname){
		condtion.push(`nickname="${nickname}"`)
	}
	if(email){
		condtion.push(`email="${email}"`)
	}
	if(userPic){
		condtion.push(`userPic="${userPic}"`)
	}
    const conditionStr = condtion.join();
    const sqlStrSelect = `update users set ${conditionStr} where id="${id}"`
    console.log(sqlStrSelect);
    conn.query(sqlStrSelect,(err,result)=>{
        if(err){
            res.json({
                "status": 1, 
                "message": "修改用户信息失败!"
            })
        }
        res.json({
            "status": 0, 
            "message": "修改用户信息成功!"
        })
    })

})

// 3.上传用户头像
router.post('/uploadPic',upload.single('file_data'),(req,res)=>{
    console.log(req.file);
    res.json({
        "status": 0, 
        "message": "http://127.0.0.1:3002/uploads/" + req.file.filename
    })
})
---------------------------------------------------------------------------------------------------------------
// 4.重置密码
router.post('/updatepwd',(req,res)=>{
    console.log(req.body);
    const {oldPwd,newPwd,id} = req.body;
    const sqlStr = `update users set password="${oldPwd}" where id="${id}"` 
    conn.query(sqlStr,(err,result)=>{
        console.log(err);
        console.log(result);
        if(err){
            res.json({ 
                "status": 1,  
                "message": "更新密码失败!"
               });
            return;
        }
        res.json({ 
            "status": 0,  
            "message": "更新密码成功!"
           });

    })
})
---------------------------------------------------------------------------------------------------------------

module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

获取文章分类列表 /my/article/cates

第一步:在router/cate_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
const sql = require('../util/sql');
// 普通post键值对
router.use(express.urlencoded());
-----------------------------------------------------------------------------------
// 1.获取文章分类列表
router.get('/cates', (req, res) => {
    // console.log(req.query);
    // const { name, slug } = req.query;
    const sqlSrtSelect = `select * from categories`
    conn.query(sqlSrtSelect, (err, result) => {
        // console.log(err);
        // console.log(result);
        if (err) {
            res.json({
                "status": 1,
                "message": "获取文章分类列表失败!",
            })
        }
        res.json({ 
            "status": 0, 
         "message": "获取文章分类列表成功!", 
            "data": result
        })
    })
})
-----------------------------------------------------------------------------------
module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

新增文章分类 /my/article/addcates

第一步:在router/cate_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
const sql = require('../util/sql');
// 普通post键值对
router.use(express.urlencoded());

// 1.获取文章分类列表
router.get('/cates', (req, res) => {
    // console.log(req.query);
    // const { name, slug } = req.query;
    const sqlSrtSelect = `select * from categories`
    conn.query(sqlSrtSelect, (err, result) => {
        // console.log(err);
        // console.log(result);
        if (err) {
            res.json({
                "status": 1,
                "message": "获取文章分类列表失败!",
            })
        }
        res.json({ 
            "status": 0, 
         "message": "获取文章分类列表成功!", 
            "data": result
        })
    })
})
-----------------------------------------------------------------------------------
// 2.新增文章分类
router.post('/addcates',(req,res)=>{
    console.log(req.body);
    const {name,slug} = req.body;
    const sqlStr =  `insert into categories(name,slug) values("${name}","${slug}") `
    conn.query(sqlStr,(err,result)=>{
        console.log(err);
        console.log(result);
        if(err){
            res.json({ 
                "status": 1, 
                "message": "新增文章分类失败!"
            })
            return;
        }
        res.json({ 
            "status": 0, 
            "message": "新增文章分类成功!"
        })
    })
})
-----------------------------------------------------------------------------------
module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

根据 Id 删除文章分类 /my/article/deletecate

第一步:在router/cate_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
const sql = require('../util/sql');
// 普通post键值对
router.use(express.urlencoded());


// 1.获取文章分类列表
router.get('/cates', (req, res) => {
    // console.log(req.query);
    // const { name, slug } = req.query;
    const sqlSrtSelect = `select * from categories`
    conn.query(sqlSrtSelect, (err, result) => {
        // console.log(err);
        // console.log(result);
        if (err) {
            res.json({
                "status": 1,
                "message": "获取文章分类列表失败!",
            })
        }
        res.json({ 
            "status": 0, 
         "message": "获取文章分类列表成功!", 
            "data": result
        })
    })
})

// 2.新增文章分类
router.post('/addcates',(req,res)=>{
    console.log(req.body);
    const {name,slug} = req.body;
    const sqlStr =  `insert into categories(name,slug) values("${name}","${slug}") `
    conn.query(sqlStr,(err,result)=>{
        console.log(err);
        console.log(result);
        if(err){
            res.json({ 
                "status": 1, 
                "message": "新增文章分类失败!"
            })
            return;
        }
        res.json({ 
            "status": 0, 
            "message": "新增文章分类成功!"
        })
    })
})
-----------------------------------------------------------------------------------
// 3.根据 Id 删除文章分类
router.get('/deletecate',(req,res)=>{
    // console.log(req.query);
    const {id} = req.query;
    const sqlStr = `delete from categories where id="${id}"`
    conn.query(sqlStr,(err,result)=>{
        console.log(err);
        console.log(result);
        if(err){
            res.json({  
                "status": 1, 
                "message": "删除文章分类失败!"
            })
            return;
        }
        res.json({  
            "status": 0, 
            "message": "删除文章分类成功!"
        })
    })
})
-----------------------------------------------------------------------------------

module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

根据 Id 获取文章分类数据 /my/article/getCatesById

第一步:在router/cate_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
const sql = require('../util/sql');
// 普通post键值对
router.use(express.urlencoded());


// 1.获取文章分类列表
router.get('/cates', (req, res) => {
    // console.log(req.query);
    // const { name, slug } = req.query;
    const sqlSrtSelect = `select * from categories`
    conn.query(sqlSrtSelect, (err, result) => {
        // console.log(err);
        // console.log(result);
        if (err) {
            res.json({
                "status": 1,
                "message": "获取文章分类列表失败!",
            })
        }
        res.json({ 
            "status": 0, 
         "message": "获取文章分类列表成功!", 
            "data": result
        })
    })
})

// 2.新增文章分类
router.post('/addcates',(req,res)=>{
    console.log(req.body);
    const {name,slug} = req.body;
    const sqlStr =  `insert into categories(name,slug) values("${name}","${slug}") `
    conn.query(sqlStr,(err,result)=>{
        console.log(err);
        console.log(result);
        if(err){
            res.json({ 
                "status": 1, 
                "message": "新增文章分类失败!"
            })
            return;
        }
        res.json({ 
            "status": 0, 
            "message": "新增文章分类成功!"
        })
    })
})

// 3.根据 Id 删除文章分类
router.get('/deletecate',(req,res)=>{
    // console.log(req.query);
    const {id} = req.query;
    const sqlStr = `delete from categories where id="${id}"`
    conn.query(sqlStr,(err,result)=>{
        console.log(err);
        console.log(result);
        if(err){
            res.json({  
                "status": 1, 
                "message": "删除文章分类失败!"
            })
            return;
        }
        res.json({  
            "status": 0, 
            "message": "删除文章分类成功!"
        })
    })
})
-----------------------------------------------------------------------------------
// 4.根据 Id 获取文章分类数据
router.get('/getCatesById',(req,res)=>{
    console.log(req.query);
    const {id} = req.query;
    const sqlSrtSelect = `select * from categories where id="${id}"` 
    conn.query(sqlSrtSelect, (err, result) => {
        // console.log(err);
        // console.log(result);
        if (err) {
            res.json({
                "status": 1,
                "message": "获取文章分类列表失败!",
            })
        }
        res.json({ 
            "status": 0, 
         "message": "获取文章分类列表成功!", 
            "data": result
        })
    })
})
-----------------------------------------------------------------------------------
module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

根据 Id 更新文章分类数据 /my/article/updatecate

第一步:在router/cate_router.js文件写,代码如下:

const express = require('express');
const router = express.Router();
const conn = require('../util/sql');
const jwt = require('jsonwebtoken');
const sql = require('../util/sql');
// 普通post键值对
router.use(express.urlencoded());


// 1.获取文章分类列表
router.get('/cates', (req, res) => {
    // console.log(req.query);
    // const { name, slug } = req.query;
    const sqlSrtSelect = `select * from categories`
    conn.query(sqlSrtSelect, (err, result) => {
        // console.log(err);
        // console.log(result);
        if (err) {
            res.json({
                "status": 1,
                "message": "获取文章分类列表失败!",
            })
        }
        res.json({ 
            "status": 0, 
         "message": "获取文章分类列表成功!", 
            "data": result
        })
    })
})

// 2.新增文章分类
router.post('/addcates',(req,res)=>{
    console.log(req.body);
    const {name,slug} = req.body;
    const sqlStr =  `insert into categories(name,slug) values("${name}","${slug}") `
    conn.query(sqlStr,(err,result)=>{
        console.log(err);
        console.log(result);
        if(err){
            res.json({ 
                "status": 1, 
                "message": "新增文章分类失败!"
            })
            return;
        }
        res.json({ 
            "status": 0, 
            "message": "新增文章分类成功!"
        })
    })
})

// 3.根据 Id 删除文章分类
router.get('/deletecate',(req,res)=>{
    // console.log(req.query);
    const {id} = req.query;
    const sqlStr = `delete from categories where id="${id}"`
    conn.query(sqlStr,(err,result)=>{
        console.log(err);
        console.log(result);
        if(err){
            res.json({  
                "status": 1, 
                "message": "删除文章分类失败!"
            })
            return;
        }
        res.json({  
            "status": 0, 
            "message": "删除文章分类成功!"
        })
    })
})

// 4.根据 Id 获取文章分类数据
router.get('/getCatesById',(req,res)=>{
    console.log(req.query);
    const {id} = req.query;
    const sqlSrtSelect = `select * from categories where id="${id}"` 
    conn.query(sqlSrtSelect, (err, result) => {
        // console.log(err);
        // console.log(result);
        if (err) {
            res.json({
                "status": 1,
                "message": "获取文章分类列表失败!",
            })
        }
        res.json({ 
            "status": 0, 
         "message": "获取文章分类列表成功!", 
            "data": result
        })
    })
})
-----------------------------------------------------------------------------------
// 5.根据 Id 更新文章分类数据
router.post('/updatecate',(req,res)=>{
    console.log(req.body);
    const {name,slug,id} = req.body;

    console.log(name,slug,id);
    let condtion = []
	if(name){
        condtion.push(`name="${name}"`)
	}
	if(slug){
        condtion.push(`slug="${slug}"`)
	}
    const conditionStr = condtion.join();
    const sqlStr = `update categories set ${conditionStr} where id="${id}" `
    // const sqlStr = `update categories set name="${name}",slug="${slug}" where id="${id}" `
    conn.query(sqlStr,(err,result)=>{
        if(err){
            res.json({ 
                "status": 1,  
                "message": "更新分类信息失败!"
            })
            return;
        }
        res.json({ 
            "status": 0,  
            "message": "更新分类信息成功!"
        })
    })
})
-----------------------------------------------------------------------------------
module.exports = router;

第二步:到Postman查看接口是否运行成功

在这里插入图片描述

将全部代码推送到码云

在这里插入图片描述
码云地址:https://gitee.com/pride123/big-event-background-01
在这里插入图片描述

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Jenkins是一个用于自动化构建、测试和部署软件的开源持续集成工具。要调用Java后台接口,可以使用Jenkins内置的HTTP Request插件或通过Shell脚本来实现。 使用HTTP Request插件调用Java后台接口的步骤如下: 1. 在Jenkins管理界面中,点击“系统管理”-> “插件管理”-> “可选插件”。 2. 搜索“HTTP Request Plugin”并安装该插件。 3. 创建一个新的Jenkins任务或编辑现有的任务。 4. 在任务的“构建”部分,点击“增加构建步骤”并选择“HTTP Request”。 5. 在“URL”字段中填Java后台接口的URL。 6. 根据接口需要,填相应的请求参数和头部信息。 7. 配置其他选项,如请求方法、身份验证等。 8. 保存任务配置并运行该任务,Jenkins将发送HTTP请求调用Java后台接口。 除了使用HTTP Request插件外,也可以通过在Jenkins任务中配置Shell脚本来调用Java后台接口。具体步骤如下: 1. 创建一个新的Jenkins任务或编辑现有的任务。 2. 在任务的“构建”部分,点击“增加构建步骤”并选择“Execute shell”(在Linux系统上)或“Execute Windows batch command”(在Windows系统上)。 3. 在脚本编辑框中编调用Java后台接口的命令。 4. 保存任务配置并运行该任务,Jenkins将执行Shell脚本调用Java后台接口。 以上是使用Jenkins调用Java后台接口的简要说明。具体的配置和使用方式还需根据具体项目和接口情况进行适当调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力活着吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值