express+sequelize实现web应用并连接MySQL数据库(附源码)

      前面介绍过node的简单实例,但在实际应用中,可以直接使用框架来处理http请求,如express。下面我们使用express来搭建一个web应用,并连接MySQL数据库。

一、安装相关工具

npm install express sequelize sequelize-cli mysql2 -S

二、数据库的初始化

1、新建数据库

2、使用sequelize cli初始化项目的数据库配置信息

npx sequelize init

3、初始化数据库配置信息后,在自动生成的config.json文件中,配置数据库信息

"development": {
    "username": "root",
    "password": "root",
    "database": "node",    //在这里配置刚刚新建的数据库名称
    "host": "127.0.0.1",
    "dialect": "mysql",
    "timezone" "+08:00"
}

4、生成模型文件

npx sequelize model:generate --name Todo --attributes name:string,deadline:date,content:string,status:int

5、持久化模型对应的数据库表

npx sequelize db:migrate

6、刷新新建的数据库,可以看到刚刚创建的todo数据表

三、目录结构

      config、migrations、models、seeders是安装sequelize后自动生成的文件。

四、ORM模型的使用——api实现

const express = require('express');
const app = express();
const models = require('../models');
const bodyParser = require('body-parser');

/*
 express提供的内置中间件有三种:static,json,urlencoded
*/
app.use(express.json());
app.use(express.urlencoded());
app.use(express.static('static',{
	extensions:['html','htm'] //请求静态资源时,若没有后缀,增加默认后缀
}))
app.use(bodyParser.urlencoded({extended:true}));


// 获取任务列表
app.get('/list',async (req,res,next)=>{
	try{
		// 查询并且汇总数
		let {status,page,limit} = req.query;
		let offset = limit*(page-1);
		let where = {};
		if(status>0){
			where.status = status
		}
		let list = await models.Todo.findAndCountAll({
			where,
			offset,
			limit: +limit
		})
		res.json({
			list
		})
	}catch(err){
		next(err);
	}
})

// 创建任务
app.post('/create',async (req,res,next)=>{
	try{
		let {name,deadline,content} = req.body;
		let todo = await models.Todo.create({
			name,
			deadline,
			content
		})
		res.json({
			message:'创建任务成功',
			todo
		})
	}catch(err){
		next(err);
	}
})

// 修改任务
app.post('/update',async (req,res,next)=>{
	try{
		let {name,deadline,content,id} = req.body;
		let todo = await models.Todo.findOne({
			where:{
				id
			}
		})
		if(todo){
			todo = await todo.update({
				name,
				deadline,
				content
			})
		}
		res.json({
			message:'修改成功',
			todo
		})
	}catch(err){
		next(err);
	}
})

// 修改任务状态
app.post('/status',async (req,res,next)=>{
	try{
		let {status,id} = req.body;
		let todo = await models.Todo.findOne({
			where:{
				id
			}
		})
		if(todo){
			todo = await todo.update({
				status
			})
		}
		res.json({
			message:'修改成功',
			todo
		})
	}catch(err){
		next(err);
	}
})

// 404处理中间件,对express来说,404不是error
function handleNotFoundMidWare(req,res,next){
	res.json({
		message:'api不存在'
	})
}
// 自定义一个处理异常的中间件
function handleErrMidWare(err,req,res,next){
	if(err){
		let {message} = err;
		res.status(500).json({
			message
		})
	}
}
// 404和异常处理的中间件放到最后面
app.use(handleNotFoundMidWare);
app.use(handleErrMidWare);

app.listen(8888,()=>{
	console.log('server启动成功');
})

五、完整项目链接

      前台部分:https://github.com/Mr-Nie/todo-list-ui

      后台部分:https://github.com/Mr-Nie/todo-list

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值