day35Express及相关内容
昨天内容回顾
1.mysql数据库讲解(DDL DML)
2.mysql模块讲解(采用连接的方式)
3.mysql模块的CRUD
4.mysql连接池的使用
5.mysql的执行方法封装(完成登录注册功能)
实现对应的商品表的操作
1.需求文档的分析(mock数据)
2.看相同的一些产品(讨论)
3.创建的数据库
//根据id查询的功能 if(router=="/good" && req.method == "GET"){ //获取get传参 let data = parse(req.url).query // 将对应的data变成一个对象 data = decode(data) //查询所有的功能 let sql = "select * from t_goods" if(data.id){ sql = "select * from t_goods where id=?" } let obj = new ResponseObj() // 根据id查询 execute(sql, data.id) . then((result)=>{ obj.data = data.id?result[0]:result res.write(JSON.stringify(obj)) res.end() }) }
分页接口书写
//分页查询商品的接口 if(router=="/good/page" && req.method == "GET"){ //获取get传参 let data = parse(req.url).query // 将对应的data变成一个对象 data = decode(data) //对应的应该从前端传的参 页码 条数 let total = data.limit?Number(data.limit):5 let currentPage = data.page?Number(data.page):1 //查询所有的功能 let sql = "select * from t_goods limit ?,?" let obj = new ResponseObj() // 根据id查询 execute(sql, [(currentPage-1)*total,total]) . then((result)=>{ obj.data = result res.write(JSON.stringify(obj)) res.end() }) }
第三方模块express
概述:express模块专门用于写web接口的一个模块(框架),他集成了http及相关的内容.使用更加方便
基础入门
1.下载安装
npm i express -S
2.导入
const express = require('express')
3.应用 createApplication(express导出就一个createApplication方法)
const app = express() //他具备对应的方法 resultful风格的接口 具备对应的请求的方法 get post delete put patch app.get("",(req,res,next)=>{ res.end('hello') }) app.listen(8080,"localhost",function(){ console.log('当前服务启动') })
express方法
express.json json文件引入的
express.Router 路由对象
express.static 静态文件访问
express.urlencoded 用于解析请求体的(body-parse里面的)
application的方法
get 请求
post 请求
delete 请求
put 请求
patch 请求
all 请求(所有都满足)
use 中间件使用(组合模式)
request 请求对象
请求获取参数 (属性)
get获取
使用query(?)
post请求 使用body (请求体)
路由传参 通过url地址传参 params(/)
response 响应对象(方法)
send() 发送数据
json() 发送json数据
redirect 重定向
render 渲染方法(ssr 服务器渲染)
router路由对象
use 中间件使用
简单登录案例
const express = require('express') //创建一个应用对象 const app = express() //解析请求体的中间件 app.use(express.urlencoded({extended:true})) //登录接口 app.post('/login',function(req,res,next){ //获取请求的参数 let username = req.body.username let password = req.body.password //进行比对 if(username=="jack" && password=='123'){ // 响应数据回去 res.json({ code:200, message: " 登录成功", data:{ username, password } }) }else{ res.json({ code:200, message: " 用户名或密码错误", data:{} }) } }) //查询(根据id查询) app.get('/user',function(req,res,next){ //获取id let id = req.query.id if(id==1){ res.json({ code:200, message: " 成功", data:{ username: " jack", password:"123" } }) }else{ res.json({ code:200, message: " 成功", data:{ } }) } }) app.listen(8888,function(){ console.log('服务器已经启动'); })
中间件使用
登录拦截
//token 后端发给前端的 前端会把他存起来 在请求对应的内容的时候带上对应的token // const token = "asdadandjwn1j2" //中间件拦截 token(令牌) // app.use("/shopList",function(req,res,next){ // //从前端的请求中读取对应的token(请求头/cookie来存储) // if(!req.cookies){ // res.send("当前没有登录") // }else if(req.cookies.token==token){//登录了 // next()//可以进入下面 // }else{ // res.send("当前没有登录") // } // }) //登录状态记录 (模拟) const isLogin = false app.use("/shopList",function(req,res,next){ if(isLogin){ next() }else{ res.send("当前未登录") } }) //商品列表 app.get("/shopList",(req,res,next)=>{ res.send("商品列表页面") }) app.get("/shopList/item",(req,res,next)=>{ res.send("商品列表") })
错误拦截操作
//错误处理 app.get("/error",(req,res,next)=>{ throw new Error("访问出错") res.send("错误页面") }) app.use(function(err,req,res,next){ if(err){ res.send("服务器正在维护"+err.message) }else{ next() } })
路由
1.路由配置
const express = require("express") //路由对象 const router = express.Router() //导入对应的处理方法 const {handlerUser,handlerUserHello,handlerUserList} = require("../handler") //对应user的路由 router.get("/",handlerUser) router.get("/list",handlerUserList) router.get("/hello",handlerUserHello) //导出去给其他地方使用 module.exports = router
2.处理函数
const handlerUser = function(req,res,next){ res.send("我是用户的主页") } const handlerUserHello = function(req,res,next){ res.send("我是用户hello") } const handlerUserList = function(req,res,next){ res.send("我是用户列表") } //导出 module.exports = { handlerUser, handlerUserHello, handlerUserList }
3.主文件
------------恢复内容结束------------