数据库的准备
第一步:打开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项目
-
git命令 初始化: git init
-
推送项目到码云上:(只需要一个master分支)
-
执行
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