文中的LayUIAdminPro版本为v2020.4.1。使用的软件是IDEA,你问我为什么不用vsCode?为了偷懒,就使用IDEA。
众所周知,前后端分离的项目,我们的登录接口验证完登录信息后,会生成token,并和用户id一起组成key-value的形式保存到redis中,然后会返回token。
使用LayUI登录后,它会把返回的token自动保存到浏览器的Local Storage中,具体看下图。
图中的key对应src/config.js的tableName,vlaue对应request中的tokenName属性。
我们在登录页面的js中也能看到LayUI保存token的操作。
只要LayUI保存了token,那么layui.admin.req去发起请求,请求头就会自动带上token。
但是,直接用ajax是无法自动带上token的,需要在发起ajax请求去获取token,所以建议使用layui.admin.req,它底层也是用ajax去发请求,不过对ajax进行了一层封装。
// 声明
var setter = layui.setter,
request = setter.request;
headers: {'access-token': layui.data(setter.tableName)[request.tokenName]}
同理,table.render请求时,也不会自动带上token,需要我们加上上面这一句,下面就是我项目中一个标准的table.render请求了。
table.render({
elem: '#LAY-stream-user-manage',
url: setter.baseUrl + 'api/user/find',
method: "post",
contentType: "application/json;charset=UTF-8",
dataType: "json",
headers: {'access-token': layui.data(setter.tableName)[request.tokenName]},
where: {
'type': 'user'
},
cols: [[
{type: 'checkbox', fixed: 'left'},
{field: 'id', title: 'User_id', templet: '#LAY-user-id'},
{field: 'nickname', title: 'User_name'},
{field: 'email', title: 'User_email'},
{field: 'loginTime', title: 'User_last_login_at', sort: true},
{field: 'enabled', title: 'User_status', templet: '#LAY-user-status'},
{title: 'Action', align: 'center', fixed: 'right', toolbar: '#table-content-list'}
]],
autoSort: false,
skin: "line",
page: {limit: 10, sort: 'id', desc: false, curr: 1, groups: 3},
limit: 10,
limits: [10, 15, 20, 25, 30],
text: {none: 'Number of data: 0'},
parseData: function (res) { //res 即为原始返回的数据
var myUrl = 'api/user/count';
var myData = {
'type': 'user'
};
// 发送请求,得到总数
let total = getCount(myUrl, myData);
// 解析响应结果
return {
"code": 0, //解析接口状态
"msg": "", //解析提示文本
"count": total, //解析数据长度
"data": res.data //解析数据列表
}
}
});