很多时候在我们查询某一项数据时,在数据过多的时候我们会选择分页展示,但是很多时候会发现在进行页面跳转时会出现报错,报错内容是数据库查询条件为空。
问题分析
其实问题很简单,报错的原因是因为代码获取到的查询条件为空,因为查询条件是由上一页面通过Form表单提交过来的数据,然后我们通过this.post
方法获得值;但是当我们进行页面跳转的时候其实就是刷新了一下当前的页面,并不会有页面再次提交到数据到当前页面来,因此自然无法获取到查询条件,报错也就可以理解了。
解决思路
如果页面跳转的时候我们无法再次获取到值,那么我们就可以考虑当有页面通过Form表单提交数据到当前页面时,我们在查询数据的同时把数据存储起来;当跳转页面时,我们可以把存储的数据取出来继续进行数据查询;当有页面再次通过Form表单提交数据到当前页面时,我们查询数据的同时更新下存储的数据,这样便可以解决我们所遇到的问题了。
解决方案
问题关键所在无非就是我们如何进行数据存储,在这里我们可以使用ThinkJS
提供的CACHE
存储,存储我们所需要的数据。
Cache配置代码
在common
模块config
文件中创建cache.js
,代码如下:
'use strict';
/**
* Created by arter on 2016/11/14.
*/
export default {
type: "file", //缓存类型
timeout: 6 * 3600, //失效时间,单位:秒
adapter: { //不同 adapter 下的配置
file: {
path: think.RUNTIME_PATH + "/cache", //缓存文件的根目录
path_depth: 2, //缓存文件生成子目录的深度
file_ext: ".json" //缓存文件的扩展名
},
redis: {
prefix: "thinkjs_"
},
memcache: {
prefix: "thinkjs_"
}
}
};
调用Cache方法
示例代码:
let taoCache = null;
if(!think.isEmpty(formVal)){
this.assign('formVal',formVal);
this.cache('formVal',formVal);
}else{
formVal = await this.cache('formVal');
}
保存代码之后我们返回页面从新测试便会发现问题已经完美解决。
以上便是问题的解决方法,如若查看更多文章请点击进入我的个人博客