背景
补充学习下node知识,课程来自imooc
从node基础到web相关的基础知识,到最后任务管理系统实战。
技术栈:react+redux+mysql+express
个人学习笔记,如有侵权,会删除。
2022.1.19
发现黑马的nodejs讲的特别好,大家可以直接B站搜索学习
笔记
需求分析
- 根据客户端传递过来的不同参数(状态,页码)查询,任务列表
- 新增一个任务的功能(名称/截止日期/内容)
- 实现一个编辑功能:根据客户端 传递的任务对象,进行编辑(名称/截止日期/内容)
- 删除 (ID)
- 修改任务状态(ID/状态–待办/完成)
数据库的初始化
- 创建todo
- 使用sequelize cli初始化项目的数据库配置信息,修改数据库名称和密码(config/config.json)
npx sequelize init
与数据库连接
- 生成模型文件
- migrate文件
- model文件,创建数据库,并赋予属性
npx sequelize model:generate --name Todo --attributes name:string,deadline:date,content:string
- 持久化,模型对应的数据库表(填充mysql里面的表的属性)
npx sequelize db:migrate
具体代码
-
目录
-
代码
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const models = require(`../db/models`);
const { sequelize } = require('../db/models');
//1. 所有的错误,http statue=500
//查询任务列表
// {
// [models: Todo],
// sequelize,
// sequelize
// }
app.use(express.json());
app.use(express.urlencoded());
app.use(bodyParser.urlencoded({ extended: true }));
//查询
app.get('/list/:status/:page', async (req, res, next) => {
//1. 状态 1:表示待办 2:完成 3:删除, -1:全部
//2. 分页的处理
let { status, page } = req.params;
console.log(status, page);
let limit = 10;
let offset = (page - 1) * limit;
let where = {};
if (status != -1) {
where.status = status;
}
let list = await models.Todo.findAndCountAll({
// where: {
// status
// },
where,
offset,
limit
})
res.json({
list,
message: '列表查询成功'
})
})
//创建一个todo
app.post('/create', async (req, res, next) => {
try {
let { id, name, deadline, content, status } = req.body;
//数据持久化到数据库
let todo = await models.Todo.create({
id,
name,
deadline,
content,
status
})
res.json({
id,
name,
deadline,
content,
status
})
} catch (error) {
next(error)
}
})
//修改一个todo
app.post('/update', async (req, res, next) => {
try {
let { name, deadline, content, id, status } = req.body;
let todo = await models.Todo.findOne({
where: {
id
}
})
if (todo) {
todo = await todo.update({
name,
deadline,
content,
status
})
}
res.json({
todo
})
} catch (error) {
next(error)
}
})
//修改一个todo,删除
app.post('/update_status', async (req, res, next) => {
try {
let { id, status } = req.body;
let todo = await models.Todo.findOne({
where: {
id
}
})
if (todo && status != todo.status) {
todo = await todo.update({
status
})
}
res.json({
todo
})
} catch (error) {
next(error)
}
})
app.use((err, req, res, next) => {
if (err) {
res.status(500).json({
message: err.message
})
}
})
app.listen(3001, () => {
console.log("服务启动成功")
})