Leveraging Jexl in JavaScript: Practical Scenarios and Code Examples

JavaScript Expression Language (Jexl) is a powerful library that allows developers to safely evaluate expression strings against a context object. It’s incredibly useful for scenarios where there’s a need to dynamically evaluate expressions based on changing data. This article explores practical scenarios where Jexl can be effectively utilized, accompanied by illustrative code examples.

1. Dynamic Configuration

Scenario: An application requires different behaviors based on user roles or application settings, which are stored in a configuration object.

Code Example:

const Jexl = require('jexl');const context = {user: {role: 'admin'}
};const expression = 'user.role == "admin" ? "Access granted" : "Access denied"';Jexl.eval(expression, context).then(result => console.log(result));
// Output: Access granted

2. Form Validation

Scenario: Validating form inputs based on a set of dynamic rules defined in a JSON object. This is particularly useful for applications where validation rules vary between deployments or user groups.

Code Example:

const Jexl = require('jexl');const formData = {age: 20
};const rules = {age: 'age > 18'
};Object.keys(rules).forEach(field => {Jexl.eval(rules[field], formData).then(isValid => {console.log(`${field} Valid: ${isValid}`);});
});
// Output: age Valid: true

3. Feature Toggling

Scenario: Managing feature toggles based on complex conditions, such as user attributes or application state, without hardcoding the conditions into the application code.

Code Example:

const Jexl = require('jexl');const featuresConfig = {newFeature: 'user.subscriptionLevel == "premium" && user.trialExpired == false'
};const userContext = {user: {subscriptionLevel: 'premium',trialExpired: false}
};Jexl.eval(featuresConfig.newFeature, userContext).then(canAccess => {console.log(`Feature Access: ${canAccess}`);
});
// Output: Feature Access: true

4. Content Filtering

Scenario: Dynamically filtering a list of items based on user-defined criteria or search queries, making it highly adaptable for custom search functionalities.

Code Example:

const Jexl = require('jexl');const books = [{ title: 'JavaScript: The Good Parts', year: 2008 },{ title: 'Eloquent JavaScript', year: 2011 }
];const filterExpression = 'year >= 2010';books.filter(book => Jexl.evalSync(filterExpression, book)).forEach(book => console.log(book.title));
// Output: Eloquent JavaScript

5. Data Transformation

Scenario: Transforming data objects based on dynamic expressions before displaying them to the user or sending them to an API.

Code Example:

const Jexl = require('jexl');const data = {price: 100,taxRate: 0.15
};const transformExpression = 'price * (1 + taxRate)';Jexl.eval(transformExpression, data).then(totalPrice => {console.log(`Total Price: ${totalPrice}`);
});
// Output: Total Price: 115

Conclusion

Jexl offers a flexible and powerful way to evaluate expressions dynamically in JavaScript. Its applications range from dynamic configurations, form validations, feature toggling, content filtering, to data transformations, providing developers with a versatile tool for handling complex logic conditions without the risk of eval-related security issues. By integrating Jexl into your projects, you can significantly reduce the complexity of your code and increase its maintainability and scalability.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D音等短视频为什么这么吸引人?长期沉迷刷D音的危害 彻底戒掉刷D音上瘾 占用大量时间 注意力分散 思维浅薄 焦虑、抑郁 干扰睡眠 视力疲劳

这是你吗? 人生最爽的事是:刷痘印。 人生最不爽的事是:刷完,什么也没有得到,事也没做。 吸引法则 1. 内容碎片化,符合快节奏时代需求 短视频的时长通常只有几秒到十几分钟,内容简短精悍&…

苹果macbook电脑删除数据恢复该怎么做?Mac电脑误删文件的恢复方法

苹果电脑删除数据恢复该怎么做?Mac电脑误删文件的恢复方法 如何在Mac上恢复误删除的文件?在日常使用Mac电脑时,无论是工作还是娱乐,我们都会创建和处理大量的文件。然而,有时候可能会不小心删除一些重要的文件&#x…

Spring Boot3,启动时间缩短 10 倍!

前面松哥写了一篇文章和大家聊了 Spring6 中引入的新玩意 AOT(见Spring Boot3 新玩法,AOT 优化!)。 文章发出来之后,有小伙伴问松哥有没有做性能比较,老实说,这个给落下了,所以今天…

保单受益人如何填?

受益人就是保险公司发生赔付,收到钱的那个人。受益人填不好,可能会导致亲人反目。 受益人分为生存受益人和身故受益人。 生存受益人就是被保险人活着能拿钱的人,医疗险,重疾险,意外险一般都会用到生存受益人。 一般…

Linux的计划任务(crontab)环境变量问题解决

1、背景 新上了个python服务,里面有调用oracle,其中有个需求需要定时去调用,贪方便想用crontab,出现了环境变量问题,于是跟他杠上了,势必要解决它! 2、现象 尽管我在计划任务里写全了脚本路径…

使用 KITTI数据集训练YOLOX

1. 现在KITTI集后,首先将数据集转换为COCO数据集格式。 kitti_vis.py import os from pathlib import Path import numpy as np import cv2def anno_vis(img, anno_list):for anno in anno_list:points np.array(anno[4:8], dtypenp.float32)cv2.rectangle(img, (…

疯狂的2023年已过,聊聊我对大模型微调技术几点实践思考

大家好,今天聊聊我对大模型微调技术几点实践看法,喜欢记得收藏、关注、点赞。 更多技术交流,资料,文末加入我们技术群获取。 为什么要对大模型进行微调(Fine-tuning) 与其说对 LLM 大模型进行微调&#xf…

周期股是什么意思?包括哪些行业?

周期股是什么意思? 所谓的经济周期,又称商业周期或商业循环,是指经济运行中周期性出现的经济扩张与经济紧缩交替更迭,循环往复的一种现象。经济周期是由低迷、复苏、高潮、和衰落构成的,周而复始就形成了所谓的经济景…

HDFS架构 之 服务视图

1 、简介 为实现以上特性,HDFS包含的各个服务模块都是经过精心设计的,HDFS的服务视图如图。 HDFS的服务视图包含三大部分:核心服务、公共服务和拓展服务。 2、 核心服务 1)Namenode。HDFS系统采用中心化设计,即Master/Slave架构。这里的Namenode即是Master,主要作用是管…

影响2024年Web3赛道的三大事件

文章来源Techub News,搜Tehub News下载查看更多Web3资讯。 比特币ETF 2023年12月29日,路透社发布重要消息称,美国证券交易委员会(SEC)可能会在美国时间的1月2日或1月3日通知申请者他们是否获得了推出现货比特币ETF&a…

SouthLeetCode-打卡24年02月第1周

SouthLeetCode-打卡24年02月第1周 // Date : 2024/02/01 ~ 2024/02/04 034.合并两个有序链表 (1) 题目描述 034#LeetCode.21.#北岸计划2024/02/01 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 (2) 题解代码 cla…

momentJs推导日历组件

实现效果: 代码: 引入momentjs然后封装两个函数构建出基本数据结构 import moment from moment;// 某月有多少天 export const getEndDay (m) > m.daysInMonth();/*** description 获取本月空值数据* param { Date } year { } 年度* param { Number } month …

vue3 之 组合式API—computed

computed计算属性函数 计算属性基本思想和Vue2的完全一致&#xff0c;组合式API下的计算属性只是修改了写法 核心步骤&#xff1a; 导入computed函数执行函数 在回调参数中return基于响应式数据做计算的值&#xff0c;用变量接收 vue <script setup> // 1.导入compute…

【db2】报错 sqlcode=-420 自动类型转换的问题

脚本执行出现未知错误:状志编码(SOLSTATE):xxx 状志字符串:xx 未知错误:DB2 SQL Error: SQLCODE-420, SQLSTATE22018, SQLERRMCDECFLOAT, DRIVER4.18.60 mysql会自动将空值转换成0&#xff0c;而db2不做任何操作。 db2 报错 sqlcode-420 自动类型转换的问题csdn db2 报错 sql…

java中String类常用API

前言&#xff1a;在学习java的String类的时候&#xff0c;有很多的API需要了解&#xff0c;下面我将举出其中在新手学习时使用频率较大的几个API。 先大体看一下有哪几个&#xff1a;&#xff08;如图&#xff09; 目录 1.equals&#xff08;&#xff09;和 equalsIgnoreCase&…

一步步建立一个C#项目(连续读取S7-1200PLC数据)

这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先创建一个窗体应用。 1、窗体应用 2、配置存储位置 3、选择框架 拖拽一个Button,可以选择视图菜单---工具箱 4、工具箱 拖拽Lable控件和TextBook控件 5、拖拽控件 接下来…

RAPTOR:树组织检索的递归抽象处理

RAPTOR: RECURSIVE ABSTRACTIVE PROCESSING FOR TREE-ORGANIZED RETRIEVAL Title&#xff1a;树组织检索的递归抽象处理 https://arxiv.org/pdf/2401.18059.pdf 摘要 检索增强语言模型可以更好的融入长尾问题&#xff0c;但是现有的方法只检索短的连续块&#xff0c;限制了整…

国密SM2算法进行数据的加密、签名和验签、解密

一、背景介绍 数据的加解密有很多种方式&#xff0c;几种常用的加密算法如下&#xff1a; DES&#xff08;Data Encryption Standard&#xff09;&#xff1a;对称算法&#xff0c;数据加密标准&#xff0c;速度较快&#xff0c;适用于加密大量数据的场合&#xff1b; 3DES&…

【C++】类和对象(3)

继续学习类和对象的最后一部分知识&#xff0c;主要有初始化列表、static成员、友元、内部类、匿名对象等。 目录 再谈构造函数 构造函数体赋值 初始化列表 explicit关键字 static成员 概念 特性 友元 友元函数 友元类 内部类 匿名对象 拷贝对象时的一些编译器优化…

Android Studio从零基础到APP上线(3)

第3章 简单控件 本章介绍App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图,容纳视图的常用布局,响应点击的按钮控件,显示图片的图像视图等。然后结合本章所学的知识,演示一个实战项目“简单计算器”的设计与实现。 3.1 文本显示 本节介绍如何在文本视图Tex…