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.主文件
------------恢复内容结束------------
浙公网安备 33010602011771号