node.js第三天

express的接口响应

支持了各种请求 POST、GET等…

server.请求姿势API(接口名称,处理函数)
server.get(url,(req,res,next)=>{})
server.post(url,(req,res,next)=>{})
req

request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性

  1. req.query 获取地址栏的数据
  2. req.body 获取非地址栏的数据 依赖中间件
  3. req.params 获取动态接口名
  4. req.method 获取前端提交方式
res

response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据

  1. res.send(any) 对等 res.write + end
  2. res.end(string|buffer)
  3. res.json(json) 返回json
  4. res.status(404).send({error:1,msg:“Sorry can’t find that!”}) 返回一个404
  5. res.jsonp(响应数据) 调用请求时的回调函数并传递响应数据
  6. 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(响应)回去,为了明确和便于维护,需要把处理的事情分一下,分配成几个部分来做,而每个部分就是一个中间件

使用中间件的三个步骤:

  1. npm i body-parser -S 安装包
  2. let bodyParser=require(‘body-parser’) 引入中间件
  3. 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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值