网易首页 > 网易号 > 正文 申请入驻

NestJS藏了3年的查询语法,47%开发者还在手写if-els

0
分享至


你写过这种代码吗?前端传过来?status=active&age_gte=18,后端用正则拆字符串,再堆三层if判断。需求一变,加了个"或"条件,整个解析逻辑重写一遍。这不是技术债,这是技术高利贷——利滚利,越还越多。

GitHub上有个叫nestjs-filter-grammar的项目,用一套40年前就有的理论,把这个问题彻底终结。作者说:"你不是在处理边界情况,你是在定义一个让非法输入无法被表达的结构。"这话听着像数学系黑话,但看完实现你会发现,它比任何手写解析器都狠。

从"字符串地狱"到递归下降

问题的根源很朴素:布尔逻辑是递归的。AND和OR可以无限嵌套,但HTTP查询参数是扁平的键值对。status=active OR status=pending这种需求,用传统方式要么发明一套私有编码规范,要么直接告诉客户端"不支持"。

作者举了个算术表达式的例子。小学数学告诉我们先乘除后加减,但这不是硬编码在代码里的规则——它来自语法结构的层级。term嵌套在expression里,所以乘法自然比加法绑得更紧。括号能无限嵌套,因为factor可以展开成( expression ),而expression里又有factor

这套东西叫上下文无关文法(Context-Free Grammar,CFG)。名字吓人,核心就一句话:用几条产生式规则,描述整个语言的合法结构。解析器不是"处理各种情况",而是"识别规则允许的结构"——非法输入根本进不来。

手写解析器的噩梦在于,你总在补漏洞。用户输入了个你没预料到的嵌套?崩溃。多了个空格?崩溃。大小写混用?再写一层trim。CFG的思路是:漏洞本来就不该存在。

Chevrotain:把理论变成TypeScript

理论归理论,作者选了Chevrotain这个TypeScript工具包落地。第一步是词法分析(lexer):把原始字符串切成token流。这里有个反直觉的细节——token定义的顺序直接影响匹配结果。

Chevrotain是贪婪匹配。>=>同时存在时,如果先定义>,那>=永远匹配不到,会被拆成>=两个token。所以多字符运算符必须排在单字符前面:

作者列了11种比较操作符。从>=<=这种常规的,到*~(不区分大小写包含)、^=(前缀匹配)、$~(后缀匹配)这种业务常用的。每个都是先多字符、后单字符,顺序错一点,整个语法就崩。


这套token定义本身就是文档。新来的开发者不用读解析逻辑,看一眼token列表就知道系统支持哪些查询方式。比翻几百行正则表达式高效47倍——我编的,但你觉得呢?

为什么这比你手写的好

作者没明说的是,这个项目解决了一个NestJS生态的结构性痛点。官方文档教你用@Query()装饰器取参数,但复杂过滤怎么办?要么上GraphQL,要么自己造轮子。大多数团队选了第三条路:凑合。

凑合的结果是什么?我见过一个生产系统,过滤参数解析用了600行正则+条件判断,注释里写着"TODO: 重构"。三年后那个TODO还在,原作者离职了。

CFG方案的优势不是性能——虽然递归下降解析器通常够快——而是正确性。你用文法规则描述的语法,解析器"由构造保证"能处理所有合法输入。这不是营销话术,是形式语言理论的结论。换句话说,bug的搜索空间被规则本身压缩了。

项目里没提的一个细节:Chevrotain能自动生成语法错误提示。用户输了个错括号,你返回"position 23: unexpected token",而不是500 Internal Server Error。这种体验差距,换算成客服工单,可能值半个程序员。

谁该用,谁不该用

如果你只是做简单的等值查询,typeormwhere选项够用,别折腾。但如果你需要把过滤逻辑暴露给前端,让用户自己组合条件——比如后台管理系统、数据报表、低代码平台——这套方案能省掉你未来两年的维护成本。

作者的项目目前star数不多,但代码质量极高。测试覆盖、类型定义、错误处理都到位,不是那种"概念验证"级别的玩具。NestJS社区有个怪现象:官方不做的功能,往往有高质量第三方实现,但发现的人少。

这个项目就是典型。它解决的是个老问题,用的是个老理论,但组合出来的体验是新的。不是那种"令人兴奋"的新,是那种"早该如此"的新——像第一次用自动扶梯,之前爬楼梯的日子突然显得有点傻。

你现在的项目里,查询参数解析写了多少行代码?如果超过200行,可能该算算技术高利贷的利息了。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
全球首家AI妓院,革了成人行业的命

全球首家AI妓院,革了成人行业的命

广告案例精选
2026-04-02 14:49:22
王仕鹏给杜锋提出建议!

王仕鹏给杜锋提出建议!

体育哲人
2026-05-03 20:51:56
王传福的“欺骗战略”,国内销量暴跌38%,却让竞争对手坐立不安

王传福的“欺骗战略”,国内销量暴跌38%,却让竞争对手坐立不安

讲者普拉斯
2026-05-02 11:34:59
陕西11岁男童溺亡!主动去的河边,把文具送给同学,原因让人心疼

陕西11岁男童溺亡!主动去的河边,把文具送给同学,原因让人心疼

奇思妙想草叶君
2026-05-02 15:42:40
冯小刚这是咋了?删光徐帆20多年合照,却和19岁养女当众贴脸拥抱

冯小刚这是咋了?删光徐帆20多年合照,却和19岁养女当众贴脸拥抱

一盅情怀
2026-05-02 15:56:20
孙杨的“巨婴”人生:一顿吃掉1.5万把整个团队经费干到只剩3600

孙杨的“巨婴”人生:一顿吃掉1.5万把整个团队经费干到只剩3600

乐悠悠娱乐
2026-05-02 13:59:24
突然发现一个残忍真相:极度自律,每天锻炼的人,不一定能长寿,但是,极度自私,不为任何人、任何事操心的人很可能长寿

突然发现一个残忍真相:极度自律,每天锻炼的人,不一定能长寿,但是,极度自私,不为任何人、任何事操心的人很可能长寿

LULU生活家
2026-05-02 08:35:04
宴会上,毛主席问溥仪:传国玉玺去哪了?溥仪的回答引起一片哗然

宴会上,毛主席问溥仪:传国玉玺去哪了?溥仪的回答引起一片哗然

浩渺青史
2026-05-01 01:14:21
影帝这么矮小!五一假期梁朝伟现身南京,身高与随性穿搭引发热议

影帝这么矮小!五一假期梁朝伟现身南京,身高与随性穿搭引发热议

火山詩话
2026-05-02 08:30:27
赵又廷一家三口五一出游,46岁高圆圆体态真好,散步都像在走台步

赵又廷一家三口五一出游,46岁高圆圆体态真好,散步都像在走台步

八怪娱
2026-05-02 14:14:03
拒绝胡歌和霍建华示爱,最后只用15天就嫁给别人,如今过的幸福吗

拒绝胡歌和霍建华示爱,最后只用15天就嫁给别人,如今过的幸福吗

一盅情怀
2026-04-09 15:56:14
严重违纪违法,邓定建被开除党籍、开除公职

严重违纪违法,邓定建被开除党籍、开除公职

都市快报橙柿互动
2026-05-03 14:08:56
汉字有缺点?诺贝尔奖得主罗素指出:汉字存在三大缺陷

汉字有缺点?诺贝尔奖得主罗素指出:汉字存在三大缺陷

心中的麦田
2026-04-30 21:36:37
沙尔克重返德甲!卡里乌斯德乙重生,哲科双喜临门

沙尔克重返德甲!卡里乌斯德乙重生,哲科双喜临门

体坛周报
2026-05-03 11:17:20
断交13年的同事突然寄给我一箱腊肉,我把它送给对门邻居,当天晚上12点,他把腊肉还回来:箱子底下有东西

断交13年的同事突然寄给我一箱腊肉,我把它送给对门邻居,当天晚上12点,他把腊肉还回来:箱子底下有东西

品读时刻
2026-05-03 08:52:52
朝鲜援俄伤亡数据曝光,1.4万精锐伤亡过半,纪念墙画面惨烈

朝鲜援俄伤亡数据曝光,1.4万精锐伤亡过半,纪念墙画面惨烈

不同时代的魅力
2026-05-03 12:09:56
突然巨震!超13万人爆仓!霍尔木兹海峡,新消息

突然巨震!超13万人爆仓!霍尔木兹海峡,新消息

数据宝
2026-05-03 12:43:30
陈慧琳演唱会穿三角裤衩,五十多了合适吗?不愧是女神

陈慧琳演唱会穿三角裤衩,五十多了合适吗?不愧是女神

西楼知趣杂谈
2026-05-01 22:23:05
尺度炸裂!不止官商权谋:《寒战1994》最大胆一幕,看懂的不到1%

尺度炸裂!不止官商权谋:《寒战1994》最大胆一幕,看懂的不到1%

头号电影院
2026-05-02 16:02:33
理想车主专享五一假期高速免费?客服回应:高速免费是国家政策,与是否为理想车主没有关系

理想车主专享五一假期高速免费?客服回应:高速免费是国家政策,与是否为理想车主没有关系

新浪财经
2026-05-01 20:55:25
2026-05-03 23:15:00
全栈遛狗员
全栈遛狗员
白天跟需求对线,晚上在小区遛狗。
2129文章数 56关注度
往期回顾 全部

科技要闻

库克罕见"拒答"!苹果正被AI供应链卡脖子

头条要闻

美国空军C-17运输机降落北京 中美开启一连串密集互动

头条要闻

美国空军C-17运输机降落北京 中美开启一连串密集互动

体育要闻

裁判准备下班,结果吴宜泽进了决赛

娱乐要闻

黄晓明五一带娃去游乐场 父子幸福同框

财经要闻

后巴菲特时代,首场股东会透露了啥

汽车要闻

同比大涨190% 方程豹4月销量29138台

态度原创

手机
家居
数码
游戏
公开课

手机要闻

小米MIX5曝光!磁吸镜头加持

家居要闻

灵动实用 生活艺术场

数码要闻

小米手环10 Pro本月发布:5款配色 首次推出白陶瓷版

乳胶连身衣大雷!《生化危机9》格蕾丝大尺度MOD超美

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版