const http=require('http')
const querystring=require('querystring')
//设置cookie过期时间
const setCookieTiem=()=>{
let da=new Date()
da.setTime( da.getTime() + 24*60*60*1000 ) //一天后过期
return da.toUTCString() //将 1598789234953这种格式的转换成=> "Sat, 29 Aug 2020 12:06:33 GMT"
}
//创建服务
const server=http.createServer((req,res)=>{
res.setHeader('Content-type','application/json') // 设置返回格式
const data=querystring.parse(req.url.split("?")[1]) //获取 get请求传递的参数
const url= req.url.split("?")[0] //请求前缀 例 /api/order/all
const method=req.method //请求方式
//console.log('data | url',data.name,url)
//本来是post请求的 但是为了方便测试 就使用get请求了
if(url==='/api/user/login' && method==='GET'){ //设置cookie
//操作cookie | path=/ 设置成为根路由生效 | httpOnly=>禁止前端修改cookie | expires设置过期时间
res.setHeader('Set-Cookie',`name=${data.name}; path=/; httpOnly; expires=${setCookieTiem()}`)
res.end( JSON.stringify({ message:'已设置cookie => 请调用 /api/user/login-test接口 查看cookie是否设置成功' }) )
return
}
/**
* 如果前端调用了 设置cookie接口 会在浏览器的cookie中设置一个name属性
*
* 解析cookie接口 即从浏览器中读取cookie 查看cookie中是否有我设置的name属性 且值等于我设置的值
*/
//解析cookie接口
if(url==='/api/user/login-test'&& method==='GET'){
req.cookie={}
let cookieStr= req.headers.cookie||'' //获取请求头中的cookie 这种格式 pgv_pvid=6783597573; RK=WIZEuhS2UH;
cookieStr.split(";").forEach(item=>{ //item => pgv_pvid=6783597573
if(!item) return
const arr=item.split("=")
req.cookie[ arr[0].trim() ]=arr[1].trim() //注意去除空格 不然后端设置不能修改cookie会不生效
})
if(req.cookie.name && req.cookie.name==='xc'){ //这个xc的值可以改
res.end( JSON.stringify({ message: `解析cookie成功 值为${req.cookie.name}` }) )
}else {
res.end( JSON.stringify({ message:'未成功解析cookie' }) )
}
}
})
//启动服务
server.listen(8888,()=>{
console.log('服务已在本地运行 端口号8888')
})
复制以上代码在新建的www.js
文件中,然后运行这个文件即可测试
依次运行 node www.js
=>
=> http://localhost:8888/api/user/login?name=xc
=> http://localhost:8888/api/user/login-test