You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
async getShopList(params: QueryExcelFindDto,isLike=false){const{
keyword ='',
province,
sys_name,page: { pageNum =1},}={page: {}, ...params};let{page: { pageSize =10}}={page: {}, ...params};// 解构入参,并给page默认值if(pageSize>100){// pageSize限制一下,不然我怕我的服务器扛不住pageSize=100}// 通过keyword长度,去选择使用什么样的查询,全文索引对匹配的字段长度有限制,// 我目前设置的是4,长度4以下的就走like查询,否则走全文索引搜索letsqlStr=`select * from fulltext_test `;letwhereStr=keyword.length>=4&&isLike===false
? ` where match(shop_name,shop_addr,sys_name) against(? in boolean mode)`
: ' where 1=1';constdb_params=[];if(keyword.length>=4&&isLike===false){// 表格里会有一些特殊字符需要处理一下,// 一开始还怀疑为什么使用了参数预编译还被注入攻击了,后来了解原来全文索引有多种模式,// 有一个模式一个使用通配符规则,而-属于通配符,数量和位置有要求,不对会报错db_params.push(keyword.replaceAll(/-/g,''))}else{whereStr+=' and (shop_name like ? or shop_addr like ? or sys_name like ?)';db_params.push(...[`%${keyword}%`,`%${keyword}%`,`%${keyword}%`])}}// ......省略代码// 执行查询语句const[ret,count]=awaitPromise.all([this.manager.query(sqlStr,db_params),this.manager.query(`select count(*) as total from fulltext_test ${whereStr}`,db_params)])// ......省略代码
记录一次nest服务开发&上线
年底了,高中同学被老板安排去核对两个表格,一个表格相当于是字典, 另一个表格会提供一个抽象的店名, 去字典表里查询该店名的店铺编号,一开始想这简单,写个脚本分分钟给他弄好,结果啪啪啪打脸,要查的店铺名实在是太抽象了,可能是字典表里三列的某一列数据。
想了一下还是给他弄一个管理后台,让他自己去搜索查找吧,搜索多列字段听说用
全文索引
会好很多,正好也学习一下这方面的知识,顺带练练一下刚学的nest。开发工具
装好 nginx, mysql
后台服务
在数据库创建表
在服务器上我已经通过docker搭建了一个mysql,远程连接上去执行下面语句
创建项目
使用脚手架创建项目
通过cli创建curd的 api模块
这个时候就已经有一个nest开发框架了,通过cli创建一个可以curd的 api模块
会在src目录生成一个excel-find的模块

在src/excel-find/entities/excel-find.entity.ts 编写对应的数据库实例对象,熟悉一下注解语法
连接数据库
通过typeorm在 src/app.module.ts 连接数据库,首先安装依赖
src/app.module.ts
服务开发
查询getShopList
主要记录
创建一个post的路由,通过
@Body
获取对应的参数对象,主要逻辑在service层处理解析上传文件的数据插入数据库
主要记录
对上传文件处理需要安装依赖,然后通过拦截器和管道,便可以获取文件对象
通过验证器对参数进行校验
创建一个validationPipe,通过filetype依赖包对文件来下进行校验
filetype会获取文件的二进制类型,比较靠谱,可以防止文件伪装
不过这里filetype高版本引入会有问题,因为打包变成CommonJS引入,提示不能使用esmodule导出的包...
跨域处理
主要记录
日志处理
主要记录
首先安装依赖
创建一个winston模块
创建有一个winston类
封装成一个动态模块,导出模块
在app.module.ts初始化winston配置
The text was updated successfully, but these errors were encountered: