express的接口响应
支持了各种请求 POST、GET等…
server.请求姿势API(接口名称,处理函数)
server.get(url,(req,res,next)=>{})
server.post(url,(req,res,next)=>{})
req
request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性
- req.query 获取地址栏的数据
- req.body 获取非地址栏的数据 依赖中间件
- req.params 获取动态接口名
- req.method 获取前端提交方式
res
response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据
- res.send(any) 对等 res.write + end
- res.end(string|buffer)
- res.json(json) 返回json
- res.status(404).send({error:1,msg:“Sorry can’t find that!”}) 返回一个404
- res.jsonp(响应数据) 调用请求时的回调函数并传递响应数据
- res.sendFile(path.resolve(‘public/error.html’)) 渲染纯 HTML 文件
next()
next()
函数的作用主要是确保所有的中间件都执行,如果没有 next()
那么这些代码就会被挂起,不会执行
ajax和jsonp
ajax和jsonp的请求及响应
<script>
window.onload = function(){
//客户端发起jsonp请求
/*jsonp({
url:"http://localhost:8080/api/home",
data:{start:10,end:10},
success:(data)=>{
console.log("获取数据",data)
}
})*/
/*ajax({
url:"http://localhost:8080/api/login",
data:{start:520,end:524},
success:data =>{
console.log("ajax获取数据",data)
}
})*/
}
</script>
const express = require("express")
const bodyParser = require("body-parser")
//创建web服务器
const app = express()
//监听端口
app.listen(8080,"localhost",()=>{
console.log("端口8080正在监听...")
})
//资源托管
app.use(express.static("./public"))
//使用中间件
app.use(bodyParser())
//接口响应
/*app.get("/api/goods",(req,res)=>{
console.log("处理了api接口",req.query)
//res.send("你好")
//res.json("{a:1,b:2}")
res.status(404).send({error:1,msg:"sorry no find that"})
})*/
//post请求传递的参数body获取不到,需要使用中间件body-parser
/*app.post("/api/goods",(req,res)=>{
console.log(req.body)
res.end()
})*/
//请求动态id req.params.id
/*app.get("/api/goods/:id",req=>{
console.log("详情....",req.params.id)
})*/
//接口响应
/*app.get("/api/home",(req,res)=>{
console.log("返回一个静态页面...")
res.sendFile(path.resolve('public/index.html'))
})*/
//响应jsonp数据
/*app.get("/api/home",(req,res)=>{
res.jsonp({error:0,data:{a:1,b:2}})
console.log(req.query)
})*/
//ajax
app.get("/api/login",(req,res)=>{
console.log("ajax",req.query,req.body)
res.send({err:0,data:{msg:"ajax请求..."}})
})
我们可以直接拿到客户端的一些数据,服务端可以对这些数据进行处理
use中间件
中间件其是一个函数,在响应发送之前对请求进行一些操作
一个请求发送到服务器后,它先收到request(请求),然后服务端处理,处理完了以后发送response(响应)回去,为了明确和便于维护,需要把处理的事情分一下,分配成几个部分来做,而每个部分就是一个中间件
使用中间件的三个步骤:
- npm i body-parser -S 安装包
- let bodyParser=require(‘body-parser’) 引入中间件
- server.use(bodyParser()) 安装中间件
后端实现跳转,页面报错或更改地址后实现一个跳转:
res.redirect(url) 指向一个接口
session实现一个身份验证/过期问题
let express = require("express")
let cookieSession = require("cookie-session")
let app = express()
//使用中间件
app.use(cookieSession({
keys:["aa","b","cc"],//加密层级
name:"mycookie",//后端给前端cookie的名字
maxAge:1000*30//设置失效时间
}))
app.use(express.static("./public"))
app.listen(8080)
//验证用户身份
app.get("/api/login",(req,res)=>{
console.log("进来了...")
//1.校验客户端用户名及密码和数据库是否一致
//2.给客户端种一个cookie,服务端会留一份session
//console.log(req.session)
req.session.nz1906 = "userId"
//3.后端种完cookie后,就可以给前端返回数据
res.send({
err:0,
mas:"恭喜你,登陆成功",
data:{
username:"张三"
}
})
})
//自动登陆
app.get("/api/user",(req,res)=>{
//读cookie,对比session
let pass = req.session.nz1906 //如果用户登陆了,pass就拿到了userId
console.log(pass)
if(pass){
//登陆成功,从数据库取数据
res.send({
err:0,
data:"/api/user的数据"
})
}else{
res.send({
err:1,
data:"用户未登陆"
})
}
res.end()
})
//注销
app.get("/api/logout",(req,res)=>{
req.session.nz1906 = undefined
res.end()
})
我们先使用express获取到客户端的数据,然后对这个cookie进行验证。服务端留一份session。在一定时间段内,用户可以登陆到页面,后端对用户身份进行验证及cookie存在时间的控制,用户也可以自动进行销毁cookie