cookie做登陆测试的思路:
user.js/router
const login = require('../controller/user')
const { SuccessModel, ErrorModel } = require('../model/resModel')
const handleUserRouter = (req,res)=>{
const method = req.method
// 登录
if(method === 'GET' && req.path === '/api/user/login'){
// const result = login(req.body.username,req.body.password)
const result = login(req.query.username,req.query.password)
console.log(req.query.username,req.query.password);
return result.then(data=>{
if(data.username){
// 操作cookie
res.setHeader('Set-Cookie',`username=${data.username}; path=/`)
return new SuccessModel()
}
return new ErrorModel('登录失败')
})
}
// 登录功能的测试
if(method === 'GET' && req.path==='/api/user/login-test'){
if(req.cookie.username){
return Promise.resolve(new SuccessModel())
}
return Promise.resolve(new ErrorModel('尚未登录'))
}
}
module.exports = handleUserRouter
user.js/controller:
const { exec } = require('../db/mysql')
const login = (username, password) => {
let sql = `select username,realname from users where username='${username}' and password='${password}';` //insert 需要加`password`,where查询中不用加上``号
return exec(sql).then(resultData => {
return resultData[0] || {}
})
}
module.exports = login
此时在console里面可以看到:
在application里面可以看到:
我们再访问一下login-test页面:
因为请求这个域的时候cookie也一并带过去了,检测到有cookie.username,所以返回登录成功
地址栏输入:http://127.0.0.1:8000/api/user/login?username=dean2&password=123
回车之后,后端获取到req.query里面的username=dean2和password=123
把这两个参数传入login方法里面得到result, result是一个promise对象,值就是resultDate[0]
user.js/controller
同时在得到data.username以后,会在服务端设置cookie:
res.setHeader('Set-Cookie',`username=${data.username}; path=/`)
这样cookie就存在本地了:
现在当我们访问测试路由http://127.0.0.1:8000/api/user/login-test的时候:
显示已经登录了,因为此时req已经把username=dean2传过去了,如红框内的,而在服务端req.cookie.username可以获取