这两天在慕课网看了一个关于Nodejs比较基础的视频教程Nodejs全栈入门-慕课网,适合初学者进行学习,介绍了Nodejs相关的基本环境(安装nodejs、npm、npx、nrm、nvm、nodemon等工具的使用),express框架相关(路由、中间件、异常处理)、sequelize ORM数据库框架、最后第三章使用express+mysql+sequelize实现了一个todo list的任务管理小型后台项目,还有关于使用pm2这个工具进行nodejs程序的运维和发布。
整个项目重点分为2部分,前端通过react+redux实现UI界面和状态管理,后端使用express做web框架,使用mysql作为数据存储,利用 sequelize作为ORM,便于通过nodejs管理和操作mysql。
作者笔名为一缕孤烟,是一名资深Web前端工程师,曾参与开发大型电商平台,现任职于某国企互联网公司,担任Web前端项目经理一职,带领8人团队。8年Web前端项目开发经验,具有丰富的H5,vue,react等开发和教学经验,热爱研究乐于分享。
1、对React、Redux熟练使用 2、了解js基本语法 3、对API调用有一定的实战经验
1、实现一个web服务,提供标准的API服务 2、了解js在服务器端的基本知识 3、基本的mysql管理知识 4、了解ORM以及相关框架的使用 5、了解基本的web服务运维相关的知识
sequelize cli 初始化项目的数据库配置信息
npx sequelize initnpx sequelize model:generate --name Todo --attributes name:string,deadline:date,content:stringnpx sequelize db:migratepm2
启动命令/运维命令/运维命令/运维文档
/* jshint esversion: 8 */
const express = require('express')
const router = express.Router()
const models = require('../db/models')
/**
* [model:Todo]
* sequelize
* Sequelize
*/
/**
* 查询任务列表
*/
router.get('/list/:status/:page', async (req, res,next)=>{
// 1. 状态 1:表示待办, 2:完成,3:删除,-1:全部
// 2. 分页的处理
let {status,page} = req.params;
let limit = 10;
let offset = (page-1)*limit;
let where = {};
if (status != -1) {
where.status = status;
}
let list = await models.Todo.findAndCountAll({
where,
limit,
offset
})
res.json({
list,
message: '列表查询成功'
})
})
/**
* 创建一个todo任务
*/
router.post('/create',async (req,res,next)=>{
try {
let { name, deadline, content } = req.body;
let todo = await models.Todo.create({
name,
deadline,
content
})
res.json({
todo,
message: '任务创建成功!'
})
} catch (error) {
next(error)
}
})
/**
* 修改一个todo任务
*/
router.post('/update', async (req,res,next)=>{
try {
let { id, name, deadline, content } = req.body;
let todo = await models.Todo.findOne({
where: {
id
}
})
if (!todo) {
return res.json({
message: `任务${id}不存在`
})
}
// 执行任务更新
todo = await todo.update({
name,
deadline,
content
})
res.json({
todo,
message: '修改任务成功'
})
} catch (error) {
next(error)
}
})
/**
* 修改一个todo任务的状态
* 修改任务的状态 (ID/状态--待办/完成)
*/
router.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
})
} else {
return res.json({
message: `任务${id}不存在或者修改的status和原来的status相同!`
})
}
res.json({
todo
})
} catch (error) {
next(error)
}
})
/**
* 删除一个todo任务
*/
router.delete('/delete/:id', async (req,res,next)=>{
try {
let { id } = req.params;
let todo = await models.Todo.findOne({
where: {
id
}
})
if (!todo) {
return res.json({
message: `任务${id}不存在`
})
}
if (todo) {
// 执行更新
todo = await todo.destroy({
})
}
if (todo == null) {
res.json({
message: `任务${id}删除成功`
})
}
} catch (error) {
next(error)
}
})
module.exports = router### 使用RestClient VSCode插件进行后端API接口测试
@baseurl = http://127.0.0.1:3000
### 根路径接口测试
GET {{baseurl}}
### 获取status为2,page为1的任务列表数据
GET {{baseurl}}/todo/list/2/1
### 获取所有的任务数据(status为-1,page为2的任务列表数据)
GET {{baseurl}}/todo/list/-1/2
### 发送JSON数据
### 新增任务
POST {{baseurl}}/todo/create
Content-Type: application/json
{
"name": "修手机",
"deadline": "2020-08-23 17:00:00",
"content": "帮老板修手机 下午5点前要完成"
}
### 修改任务
POST {{baseurl}}/todo/update
Content-Type: application/json
{
"id": 5,
"name": "学习任务005",
"deadline": "2020-08-23T07:16:00.000Z",
"content": "帮助小明补习功课"
}
### 修改任务的状态
POST {{baseurl}}/todo/update_status
Content-Type: application/json
{
"id": 8,
"status": 3
}
### 删除一个id为8的任务
DELETE {{baseurl}}/todo/delete/8可惜这个视频只有后端部分,没有前端的代码。关于后端todo_api的源代码我上传到自己的Github上面了,地址为:todo_api
git clone https://github.com/ccf19881030/todo_api.git下载好todo_api源代码后,进入到项目根目录,执行npm install命令安装依赖
npm install在项目根目录下运行npm start启动项目
npm start1、需要在本地或者服务器比如腾讯云、阿里云上面配置安装好mysql数据库并创建数据库todo_development以及对应的表todos,然后修改todo_api/db/config/config.json文件
{
"development": {
"username": "root",
"password": "123456",
"database": "todo_development",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+08:00"
},
"test": {
"username": "root",
"password": "123456",
"database": "todo_development",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": "123456",
"database": "todo_development",
"host": "127.0.0.1",
"dialect": "mysql"
}
}其中数据库连接信息需要根据自己的配置进行修改。 下面是我在自己的Windows10系统下使用VSCode运行的后端截图:

发现postman是目前最好的一款http接口测试工具了,我很喜欢用这款软件用于http接口的测试。 当然也可以使用REST Client插件、fiddler、curl命令行工具。
