From c336a6b666b7d1fdbe0ca2f9408297cba286ad29 Mon Sep 17 00:00:00 2001 From: qzd1 <1526772369@qq.com> Date: Thu, 17 Dec 2020 02:07:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=90=8D=E7=A7=B0,task=E7=BC=96=E8=BE=91bug=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/dbConfig.js | 2 +- package.json | 3 +- services/taskService.js | 347 ++++++++++++++++++---------------------- services/userService.js | 14 +- utils/index.js | 43 ++--- 5 files changed, 186 insertions(+), 223 deletions(-) diff --git a/db/dbConfig.js b/db/dbConfig.js index d8b1eab..a347cba 100644 --- a/db/dbConfig.js +++ b/db/dbConfig.js @@ -9,7 +9,7 @@ const mysql = { port: '3306', // 数据库的端口号,如果不设置,默认是3306 user: 'root', // 创建数据库时设置用户名 password: '123456', // 创建数据库时设置的密码 - database: 'my_test', // 创建的数据库 + database: 'mytest', // 创建的数据库 connectTimeout: 5000 // 连接超时 } diff --git a/package.json b/package.json index 5b647e3..51f9eca 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "todo-nodejs-api", "version": "1.0.0", "description": "NodeJS全栈开发之RESTFUL API基于Node.js+Express+Mysql实现后端接口", - "author": "JackChen <278910933@qq.com>", + "author": "", "main": "index.js", "dependencies": { "body-parser": "^1.19.0", @@ -27,7 +27,6 @@ "url": "git+https://github.com/jackchen0120/todo-nodejs-api.git" }, "keywords": [], - "author": "", "license": "ISC", "bugs": { "url": "https://github.com/jackchen0120/todo-nodejs-api/issues" diff --git a/services/taskService.js b/services/taskService.js index ea90e45..817b4c0 100644 --- a/services/taskService.js +++ b/services/taskService.js @@ -2,21 +2,15 @@ * 描述: 业务逻辑处理 - 任务相关接口 * 作者: Jack Chen * 日期: 2020-06-20 -*/ + */ const { querySql, queryOne } = require('../utils/index'); const jwt = require('jsonwebtoken'); const boom = require('boom'); const { validationResult } = require('express-validator'); -const { - CODE_ERROR, - CODE_SUCCESS, - PRIVATE_KEY, - JWT_EXPIRED -} = require('../utils/constant'); +const { CODE_ERROR, CODE_SUCCESS, PRIVATE_KEY, JWT_EXPIRED } = require('../utils/constant'); const { decode } = require('../utils/user-jwt'); - // 查询任务列表 function queryTaskList(req, res, next) { const err = validationResult(req); @@ -24,96 +18,91 @@ function queryTaskList(req, res, next) { if (!err.isEmpty()) { // 获取错误信息 const [{ msg }] = err.errors; - // 抛出错误,交给我们自定义的统一异常处理程序进行错误返回 + // 抛出错误,交给我们自定义的统一异常处理程序进行错误返回 next(boom.badRequest(msg)); } else { let { pageSize, pageNo, status } = req.query; // 默认值 pageSize = pageSize ? pageSize : 1; pageNo = pageNo ? pageNo : 1; - status = (status || status == 0) ? status : null; + status = status || status == 0 ? status : null; - let query = `select d.id, d.title, d.content, d.status, d.is_major, d.gmt_create, d.gmt_expire from sys_task d`; - querySql(query) - .then(data => { - // console.log('任务列表查询===', data); + let query = `select d.id, d.title, d.content, d.status, d.is_major, d.e, d.gmt_expire from task d`; + querySql(query).then((data) => { + // console.log('任务列表查询===', data); if (!data || data.length === 0) { - res.json({ - code: CODE_ERROR, - msg: '暂无数据', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '暂无数据', + data: null, + }); } else { - // 计算数据总条数 - let total = data.length; + let total = data.length; // 分页条件 (跳过多少条) let n = (pageNo - 1) * pageSize; // 拼接分页的sql语句命令 if (status) { - let query_1 = `select d.id, d.title, d.content, d.status, d.is_major, d.gmt_create, d.gmt_expire from sys_task d where status='${status}' order by d.gmt_create desc`; - querySql(query_1) - .then(result_1 => { + let query_1 = `select d.id, d.title, d.content, d.status, d.is_major, d.gmt_create, d.gmt_expire from task d where status='${status}' order by d.gmt_create desc`; + querySql(query_1).then((result_1) => { console.log('分页1===', result_1); if (!result_1 || result_1.length === 0) { - res.json({ - code: CODE_SUCCESS, - msg: '暂无数据', - data: null - }) + res.json({ + code: CODE_SUCCESS, + msg: '暂无数据', + data: null, + }); } else { let query_2 = query_1 + ` limit ${n} , ${pageSize}`; - querySql(query_2) - .then(result_2 => { + querySql(query_2).then((result_2) => { console.log('分页2===', result_2); if (!result_2 || result_2.length === 0) { - res.json({ - code: CODE_SUCCESS, - msg: '暂无数据', - data: null - }) + res.json({ + code: CODE_SUCCESS, + msg: '暂无数据', + data: null, + }); } else { - res.json({ - code: CODE_SUCCESS, - msg: '查询数据成功', + res.json({ + code: CODE_SUCCESS, + msg: '查询数据成功', data: { rows: result_2, total: result_1.length, pageNo: parseInt(pageNo), pageSize: parseInt(pageSize), - } - }) + }, + }); } - }) + }); } - }) + }); } else { let query_3 = query + ` order by d.gmt_create desc limit ${n} , ${pageSize}`; - querySql(query_3) - .then(result_3 => { + querySql(query_3).then((result_3) => { console.log('分页2===', result_3); if (!result_3 || result_3.length === 0) { - res.json({ - code: CODE_SUCCESS, - msg: '暂无数据', - data: null - }) + res.json({ + code: CODE_SUCCESS, + msg: '暂无数据', + data: null, + }); } else { - res.json({ - code: CODE_SUCCESS, - msg: '查询数据成功', + res.json({ + code: CODE_SUCCESS, + msg: '查询数据成功', data: { rows: result_3, total: total, pageNo: parseInt(pageNo), pageSize: parseInt(pageSize), - } - }) + }, + }); } - }) + }); } } - }) + }); } } @@ -125,36 +114,33 @@ function addTask(req, res, next) { next(boom.badRequest(msg)); } else { let { title, content, gmt_expire } = req.body; - findTask(title, 1) - .then(task => { + findTask(title, 1).then((task) => { if (task) { - res.json({ - code: CODE_ERROR, - msg: '任务名称不能重复', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '任务名称不能重复', + data: null, + }); } else { - const query = `insert into sys_task(title, content, status, is_major, gmt_expire) values('${title}', '${content}', 0, 0, '${gmt_expire}')`; - querySql(query) - .then(data => { + const query = `insert into task(title, content, status, is_major, gmt_expire) values('${title}', '${content}', 0, 0, '${gmt_expire}')`; + querySql(query).then((data) => { // console.log('添加任务===', data); if (!data || data.length === 0) { - res.json({ - code: CODE_ERROR, - msg: '添加数据失败', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '添加数据失败', + data: null, + }); } else { - res.json({ - code: CODE_SUCCESS, - msg: '添加数据成功', - data: null - }) + res.json({ + code: CODE_SUCCESS, + msg: '添加数据成功', + data: null, + }); } - }) + }); } - }) - + }); } } @@ -166,47 +152,33 @@ function editTask(req, res, next) { next(boom.badRequest(msg)); } else { let { id, title, content, gmt_expire } = req.body; - findTask(id, 2) - .then(task => { + findTask(id, 2).then((task) => { if (task) { - findTask(title, 1) - .then(result => { - if (result) { - res.json({ - code: CODE_ERROR, - msg: '任务名称不能重复', - data: null - }) + const query = `update task set title='${title}', content='${content}', gmt_expire='${gmt_expire}' where id='${id}'`; + querySql(query).then((data) => { + // console.log('编辑任务===', data); + if (!data || data.length === 0) { + res.json({ + code: CODE_ERROR, + msg: '更新数据失败', + data: null, + }); } else { - const query = `update sys_task set title='${title}', content='${content}', gmt_expire='${gmt_expire}' where id='${id}'`; - querySql(query) - .then(data => { - // console.log('编辑任务===', data); - if (!data || data.length === 0) { - res.json({ - code: CODE_ERROR, - msg: '更新数据失败', - data: null - }) - } else { - res.json({ - code: CODE_SUCCESS, - msg: '更新数据成功', - data: null - }) - } - }) + res.json({ + code: CODE_SUCCESS, + msg: '更新数据成功', + data: null, + }); } - }) + }); } else { - res.json({ - code: CODE_ERROR, - msg: '参数错误或数据不存在', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '参数错误或数据不存在', + data: null, + }); } - }) - + }); } } @@ -218,36 +190,33 @@ function updateTaskStatus(req, res, next) { next(boom.badRequest(msg)); } else { let { id, status } = req.body; - findTask(id, 2) - .then(task => { + findTask(id, 2).then((task) => { if (task) { - const query = `update sys_task set status='${status}' where id='${id}'`; - querySql(query) - .then(data => { + const query = `update task set status='${status}' where id='${id}'`; + querySql(query).then((data) => { // console.log('操作任务状态===', data); if (!data || data.length === 0) { - res.json({ - code: CODE_ERROR, - msg: '操作数据失败', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '操作数据失败', + data: null, + }); } else { - res.json({ - code: CODE_SUCCESS, - msg: '操作数据成功', - data: null - }) + res.json({ + code: CODE_SUCCESS, + msg: '操作数据成功', + data: null, + }); } - }) + }); } else { - res.json({ - code: CODE_ERROR, - msg: '参数错误或数据不存在', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '参数错误或数据不存在', + data: null, + }); } - }) - + }); } } @@ -259,36 +228,33 @@ function updateMark(req, res, next) { next(boom.badRequest(msg)); } else { let { id, is_major } = req.body; - findTask(id, 2) - .then(task => { + findTask(id, 2).then((task) => { if (task) { - const query = `update sys_task set is_major='${is_major}' where id='${id}'`; - querySql(query) - .then(data => { + const query = `update task set is_major='${is_major}' where id='${id}'`; + querySql(query).then((data) => { // console.log('点亮红星标记===', data); if (!data || data.length === 0) { - res.json({ - code: CODE_ERROR, - msg: '操作数据失败', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '操作数据失败', + data: null, + }); } else { - res.json({ - code: CODE_SUCCESS, - msg: '操作数据成功', - data: null - }) + res.json({ + code: CODE_SUCCESS, + msg: '操作数据成功', + data: null, + }); } - }) + }); } else { - res.json({ - code: CODE_ERROR, - msg: '参数错误或数据不存在', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '参数错误或数据不存在', + data: null, + }); } - }) - + }); } } @@ -300,57 +266,54 @@ function deleteTask(req, res, next) { next(boom.badRequest(msg)); } else { let { id, status } = req.body; - findTask(id, 2) - .then(task => { + findTask(id, 2).then((task) => { if (task) { - const query = `update sys_task set status='${status}' where id='${id}'`; - // const query = `delete from sys_task where id='${id}'`; - querySql(query) - .then(data => { + // const query = `update task set status='${status}' where id='${id}'`; + const query = `delete from task where id='${id}'`; + querySql(query).then((data) => { // console.log('删除任务===', data); if (!data || data.length === 0) { - res.json({ - code: CODE_ERROR, - msg: '删除数据失败', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '删除数据失败', + data: null, + }); } else { - res.json({ - code: CODE_SUCCESS, - msg: '删除数据成功', - data: null - }) + res.json({ + code: CODE_SUCCESS, + msg: '删除数据成功', + data: null, + }); } - }) + }); } else { - res.json({ - code: CODE_ERROR, - msg: '数据不存在', - data: null - }) + res.json({ + code: CODE_ERROR, + msg: '数据不存在', + data: null, + }); } - }) - + }); } } // 通过任务名称或ID查询数据是否存在 function findTask(param, type) { let query = null; - if (type == 1) { // 1:添加类型 2:编辑或删除类型 - query = `select id, title from sys_task where title='${param}'`; + if (type == 1) { + // 1:添加类型 2:编辑或删除类型 + query = `select id, title from task where title='${param}'`; } else { - query = `select id, title from sys_task where id='${param}'`; + query = `select id, title from task where id='${param}'`; } return queryOne(query); } - module.exports = { queryTaskList, addTask, editTask, updateTaskStatus, updateMark, - deleteTask -} + deleteTask, +}; diff --git a/services/userService.js b/services/userService.js index 29f91ce..9c08ec9 100644 --- a/services/userService.js +++ b/services/userService.js @@ -32,7 +32,7 @@ function login(req, res, next) { let { username, password } = req.body; // md5加密 password = md5(password); - const query = `select * from sys_user where username='${username}' and password='${password}'`; + const query = `select * from user where username='${username}' and password='${password}'`; querySql(query) .then(user => { // console.log('用户登录===', user); @@ -96,7 +96,7 @@ function register(req, res, next) { }) } else { password = md5(password); - const query = `insert into sys_user(username, password) values('${username}', '${password}')`; + const query = `insert into user(username, password) values('${username}', '${password}')`; querySql(query) .then(result => { // console.log('用户注册===', result); @@ -107,7 +107,7 @@ function register(req, res, next) { data: null }) } else { - const queryUser = `select * from sys_user where username='${username}' and password='${password}'`; + const queryUser = `select * from user where username='${username}' and password='${password}'`; querySql(queryUser) .then(user => { const token = jwt.sign( @@ -154,11 +154,11 @@ function resetPwd(req, res, next) { oldPassword = md5(oldPassword); validateUser(username, oldPassword) .then(data => { - console.log('校验用户名和密码===', data); + // console.log('校验用户名和密码===', data); if (data) { if (newPassword) { newPassword = md5(newPassword); - const query = `update sys_user set password='${newPassword}' where username='${username}'`; + const query = `update user set password='${newPassword}' where username='${username}'`; querySql(query) .then(user => { // console.log('密码重置===', user); @@ -197,13 +197,13 @@ function resetPwd(req, res, next) { // 校验用户名和密码 function validateUser(username, oldPassword) { - const query = `select id, username from sys_user where username='${username}' and password='${oldPassword}'`; + const query = `select id, username from user where username='${username}' and password='${oldPassword}'`; return queryOne(query); } // 通过用户名查询用户信息 function findUser(username) { - const query = `select id, username from sys_user where username='${username}'`; + const query = `select id, username from user where username='${username}'`; return queryOne(query); } diff --git a/utils/index.js b/utils/index.js index 6cf7981..7904dd2 100644 --- a/utils/index.js +++ b/utils/index.js @@ -2,8 +2,7 @@ * 描述: 连接mysql模块 * 作者: Jack Chen * 日期: 2020-06-20 -*/ - + */ const mysql = require('mysql'); const config = require('../db/dbConfig'); @@ -15,13 +14,13 @@ function connect() { host, user, password, - database - }) + database, + }); } // 新建查询连接 -function querySql(sql) { - const conn = connect(); +async function querySql(sql) { + const conn = await connect(); return new Promise((resolve, reject) => { try { conn.query(sql, (err, res) => { @@ -30,33 +29,35 @@ function querySql(sql) { } else { resolve(res); } - }) + }); } catch (e) { reject(e); } finally { // 释放连接 conn.end(); } - }) + }); } // 查询一条语句 function queryOne(sql) { return new Promise((resolve, reject) => { - querySql(sql).then(res => { - console.log('res===',res) - if (res && res.length > 0) { - resolve(res[0]); - } else { - resolve(null); - } - }).catch(err => { - reject(err); - }) - }) + querySql(sql) + .then((res) => { + // console.log('res===', res); + if (res && res.length > 0) { + resolve(res[0]); + } else { + resolve(null); + } + }) + .catch((err) => { + reject(err); + }); + }); } module.exports = { querySql, - queryOne -} \ No newline at end of file + queryOne, +}; From c646320b39d7e7f8274c7c580d8f682c278aee85 Mon Sep 17 00:00:00 2001 From: qzd1 <1526772369@qq.com> Date: Mon, 25 Jan 2021 21:07:31 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0dockerfile=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 2 ++ Dockerfile | 6 ++++++ db/dbConfig.js | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6400f8c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +# **/node_modules +.git \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..eb83f04 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM node:10.12.0 +COPY ./ /app +WORKDIR /app +# RUN npm install +EXPOSE 8088 +CMD npm run start \ No newline at end of file diff --git a/db/dbConfig.js b/db/dbConfig.js index a347cba..523b42f 100644 --- a/db/dbConfig.js +++ b/db/dbConfig.js @@ -5,7 +5,7 @@ */ const mysql = { - host: 'localhost', // 主机名称,一般是本机 + host: '172.17.0.2', // 主机名称,一般是本机 localhost 主机名称是mysql所在的电脑or容器的ipAddress port: '3306', // 数据库的端口号,如果不设置,默认是3306 user: 'root', // 创建数据库时设置用户名 password: '123456', // 创建数据库时设置的密码