Web前端105天-day36-Node.js

node.jsday08

目录

前言

一、复习

二、.错误处理的中间件

三、接口练习

总结


前言

数据库脚本可以私聊我单独获取,node.js08学习开始


一、复习

 

二、.错误处理的中间件

  • 于是后置的中间件,位置写在所有路由或者路由器的后边
app.use( (err, req, res, next)=>{
   err  路由中传递过来的错误信息
   res.send({code: 500,msg: '服务器内部错误'})
} )
  • 在路由中出现错误后,执行next(err)就可以请求到错误处理中间件

三、接口练习

  • 文件目录结构

 

  • 练习1:在routes目录下创建新闻模块路由器news.js,添加路由,最后暴露路由器对象
  • 练习2:添加新闻分类的接口(get /menu),查询新闻分类表ht_cat的数据,最后响应{code:200, msg: '新闻分类', data: 数据}
  • 练习3:在app.js下引入新闻模块路由器,最后挂载,添加前缀 /v1/news
  • 练习4:添加新闻列表的接口(get  /list),查询新闻的数据,get传递分类编号cat_id,当前的页码pno,每页的数据量count,执行SQL命令,进行分页查询,查询出这一页的数据,最后响应{ code: 200, msg: '新闻列表', data: 数据,  total: 总数据量, pages: 总页码, pno: 当前页码  }
  • 练习5:添加新闻详情的接口(get  /detail),get传递新闻的编号,查询出编号对应的新闻,如果新闻不存在响应 {code:400,msg:'该文章不存在'},否则响应{code: 200,msg:'新闻详情', data: 数据}
// app.js

// 引入express模块
const express = require('express')
// 引入关于汉唐路由器
const about = require('./routes/about')
// 引入新闻中心路由器
const news = require('./routes/news')
// 引入合作交流路由器
const coop = require('./routes/coop')
// 引入招贤纳士路由器
const job = require('./routes/job')

// 创建WEB服务器 
const app = express()
// 设置端口
app.listen(3000,()=>{
	console.log('服务器启动成功')
})
// 将post传参转为对象
app.use( express.urlencoded({
	extended: true
}) )

// 挂载关于汉唐路由器,添加前缀/v1/about
app.use( '/v1/about',about )
// 挂载新闻中心路由器,添加前缀/v1/news
app.use( '/v1/news',news )
// 挂载合作交流路由器,添加前缀/v1/coop
app.use( '/v1/coop',coop )
// 挂载招贤纳士路由器,添加前缀/v1/job
app.use( '/v1/job',job )

// 在所有路由(器)后边,添加错误处理中间件,拦截所有的错误(mysql)
app.use( (err,req,res,next)=>{
	// err 接收的路由中传递的错误信息
	console.log(err)
	// 响应给客户端错误信息
	res.send({code:500,msg:'服务器内部错误'})
} )
// pool.js

// 引入mysql模块
const mysql = require('mysql')
// 创建连接池对象
const pool = mysql.createPool({
	host: '127.0.0.1',
	port: '3306',
	user: 'root',
	password: '',
	database: 'hantang',
	connectionLimit: '15',
	multipleStatements: true
})
// 暴露连接池对象
module.exports = pool
// news.js

// 引入express模块
const express = require('express')
// 引入连接池模块
const pool = require('../pool')
// 创建路由器对象
const router = express.Router()
// 添加路由
//1.新闻分类接口(get /menu)
// 接口地址:/v1/news/menu
// 请求方式:get
router.get('/menu',(req,res,next)=>{
	// 执行SQL命令
	pool.query('select * from ht_cat',(err,r)=>{
		if(err) {
			return next(err)
		}
		res.send({code:200,msg:'新闻分类',data: r})
	})
})
// 2.新闻列表接口(get /list)
// 接口地址:/v1/news/list
// 请求方式:get
router.get('/list',(req,res,next)=>{
	// 获取get传递的参数
	var obj = req.query
	// 判断是否为空
	if(!obj.pno) {
		obj.pno = 1
	}
	if(!obj.count){
		obj.count = 5
	}
	console.log(obj)
	// 计算出开始查询的值
	var start = (obj.pno-1)*obj.count
	// 将每页数据量转为数值
	var size = parseInt(obj.count)
	// 执行SQL命令
	pool.query('select nid,title,ctime,cat_id from ht_news where cat_id=? limit ?,?; select count(*) n from ht_news where cat_id=?',[obj.cat_id,start,size,obj.cat_id],(err,r)=>{
		if(err) {
			return next(err)
		}
		console.log(r)
		// 响应
		res.send({
			code: 200,
			msg: '新闻列表',
			data: r[0],
			total: r[1][0].n,   //总数据量
			pages: Math.ceil(r[1][0].n/obj.count), //总页码 = 向上取整(总数据量/每页数据量)
			pno: obj.pno
		})
	})
})
// 3.新闻详情接口(get /detail)
// 接口地址:/v1/news/detail
// 请求方式:get
router.get('/detail',(req,res,next)=>{
	// 获取get传递的参数
	var obj = req.query
	console.log(obj)
	// 执行SQL命令
	pool.query('select * from ht_news where nid=?',[obj.nid],(err,r)=>{
		if(err) {
			return next(err)
		}
		console.log(r)
		// r 成功结果是数组,如果为空数组说明数据不存在,否则查询成功
		if(r.length===0) {
			res.send({code:400,msg:'该文章不存在'})
		}else{
			res.send({code:200,msg:'新闻详情',data:r})
		}
	})
})


// 暴露路由器对象
module.exports = router
  • 练习6:在路由器目录routes下创建合作交流路由器coop.js,创建路由器对象,添加路由,暴露路由器对象;
  • 练习7:在app.js引入路由器coop.js,挂载路由器,添加前缀/v1/coop
  • 练习8:编写提交留言接口(post  /add),post传递的参数有姓名,手机号码,邮箱,详情,留言时间,是否为项目推荐,将参数插入到数据表ht_cooperate,最后响应{code:200,msg:'留言成功'}

  • 练习9:编写修改留言信息的接口(put  /update),post传递留言编号、姓名、手机、邮箱、时间、是否为项目推荐,获取传递的参数,执行SQL命令,修改编号对应的数据,如果修改失败响应{code:400,msg:'修改失败'},否则{code:200,msg:'修改成功'}
  • 练习10:编写删除留言信息的接口(delete  /message),get传递编号,执行SQL命令,删除编号对应的数据,如果删除失败响应{code:400,msg:'删除失败'},否则删除成功{code:200,msg:'删除成功'}

通过SQL命令的结果判断是否成功

1.插入数据   结果是对象,不需要判断

2.修改数据   结果是对象,判断changedRows属性,如果是0修改失败,否则修改成功

3.删除数据   结果是对象,判断affectedRows属性,如果是0删除失败,否则删除成功

4.查询数据   结果是数组,判断数组长度,如果是空数组查询失败,否则成功

// coop.js

// 引入express模块
const express = require('express')
// 引入连接池模块
const pool = require('../pool')
// 创建路由器对象
const router = express.Router()
// 添加路由
// 1.添加留言(post /add)
// 接口地址:/v1/coop/add
// 请求方式:post
router.post('/add',(req,res,next)=>{
	// 获取post传递参数
	var obj = req.body
	// 往对象下添加属性
	obj.ctime = Date.now()
	console.log(obj)
	// 执行SQL命令
	pool.query('insert into ht_cooperate set ?',[obj],(err,r)=>{
		if(err){
			return next(err)
		}
		console.log(r)
		// 直接响应成功,插入不需要判断
		res.send({code:200,msg:'留言成功'})
	})
})
// 2.修改留言接口(put /update)
// 接口地址:/v1/coop/update
// 请求方式:put
router.put('/update',(req,res,next)=>{
	// 获取post传递的参数
	var obj = req.body
	// 添加时间
	// obj.ctime = Date.now()
	console.log(obj)
	// 执行SQL命令,修改编号对应的数据
	pool.query('update ht_cooperate set ? where cid=?',[obj,obj.cid],(err,r)=>{
		if(err) {
			return next(err)
		}
		console.log(r)
		// r 成功的结果是对象,如果对象下的changedRows值为0说明修改失败,否则修改成功
		if(r.changedRows === 0){
			res.send({code:400,msg:'修改失败'})
		}else{
			res.send({code:200,msg:'修改成功'})
		}		
	})
})
// 3.删除留言接口(delete /message)
// 接口地址:/v1/coop/message
// 请求方式:delete
router.delete('/message',(req,res,next)=>{
	// 获取get传递的参数
	var obj = req.query
	console.log(obj)
	// 执行SQL命令,删除编号对应的留言        
	pool.query('delete from ht_cooperate where cid=?',[obj.cid],(err,r)=>{
		if(err) {
			return next(err)
		}
		console.log(r)
		// 结果是对象,如果对象下的affectedRows值为0,说明删除失败,否则删除成功
		if(r.affectedRows===0){
			res.send({code:400,msg:'删除失败'})
		}else{
			res.send({code:200,msg:'删除成功'})
		}
	})
})


// 暴露路由器对象
module.exports = router
  • 练习11:新建job.js路由器,  在app.js下引入并挂载,添加前缀/v1/job
  •  练习12:编写招聘信息的接口(get  /list),get传递当前的页码pno和每页数据量count,执行分页查询,查询这一页的数据,最后响应{code:200,msg:'查询成功', data:数据, total: 总数据量, pages: 总页数, pno: 当前页码}

// job.js

// 引入express模块
const express = require('express')
// 引入连接池模块
const pool = require('../pool')
// 创建路由器对象
const router = express.Router()
// 添加路由
// 1.列表(get /list)
// 接口地址:/v1/job/list
// 请求方式:get
router.get('/list',(req,res,next)=>{
	// 获取get传递的参数
	var obj = req.query
	// 判断参数是否为空
	if(!obj.pno) {
		obj.pno = 1
	}
	if(!obj.count){
		obj.count = 2
	}
	// 计算开始查询的值
	var start = (obj.pno-1)*obj.count
	// 将每页数据量转为数值
	var size = parseInt(obj.count)
	// 执行SQL命令(分页,总数据量)
	pool.query('select * from ht_job limit ?,?;select count(*) n from ht_job',[start,size],(err,r)=>{
		if(err) {
			return next(err)
		}
		console.log(r)
		res.send({
			code: 200,
			msg: '查询成功',
			data:r[0],
			total: r[1][0].n,
			pages: Math.ceil(r[1][0].n/obj.count),
			pno: obj.pno
		})
	})
})

// 暴露路由器对象
module.exports = router


总结

node.jsday08学习结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值