javascript - 我如何在nodejs中使用字符串作为变量
问题描述
我在 nodeJs 的应用程序中有一些代码,它根据后端的数据生成一个过滤器列表。有静态过滤器和动态过滤器。对于动态过滤器,我将查询字符串的名称作为字符串存储在我的配置中。所以问题是我如何才能将该字符串不用作字符串,而是用作保存该查询字符串的 const 的名称。下面是我的代码的样子。 data[i].queryname在这种情况下包含字符串tractList
let result = await couch.n1qlQuery_wId('contacts', data[i].queryname ,[])
for (let b = 0; b < result[0].length; b++) {
let newOption = new option
newOption.value = result[0][b].value_key
newOption.name = result[0][b].name
newOption.selected = false
newFilter.options.push(newOption)
}
这是我的 const 的样子
const tractList = 'select meta().id value_key, name from Contacts where _type = "tract_info" order by name'
解决方案
一个警告;我认为其他答案是正确的,正确的方法是让您的配置成为一个对象,您可以在其中查找值。
这意味着您的配置代码,而不是看起来像:
const tractList = 'select meta().id value_key, name from Contacts where _type = "tract_info" order by name';
...
应该看起来更像:
const config: {
tractList: 'select meta().id value_key, name from Contacts where _type = "tract_info" order by name',
...
}
这意味着您可以像这样相当安全地查找它:
let query = config[data[i].queryname];
通常的方法是从模块中导出这个 congi 对象,以便您可以在任何地方导入它。
因此,要回答您的实际问题,如果您 100% 确定要查找的变量在范围内,并且 1000% 确定查找变量是正确的,您可以评估查找变量。
var query = eval(data[i].queryname);
这是不安全的原因是 eval 只会编译该函数中的任何内容并运行它!你可以想象,如果有人不小心改变了他们的查询字符串,而不是'tractList'
包含类似的东西,require("child_process").exec("rm -rf /")
如果你碰巧编译并运行它,你就不会觉得好笑!
此外,您可以想象,每次要查找变量时都编译新代码会很慢。
因此,尽管您在技术上可以做到这一点,但我敦促您不要这样做,而是采用更安全、更快的方法将您的配置定义为对象。
推荐阅读
- r - 如何确保 3 个单独的 dfs 只包含相同的列?
- c# - 在 docker-compose 中访问 GRPC 服务
- git - `export GPG_TTY=$(tty)` 的签名问题
- javascript - 如何将 CSS 过渡(例如淡入)应用到 React 中的项目列表,以便它们的动画在渲染时一个接一个地排序?
- javascript - 来自给定位置的星图图像
- javascript - Javascript 将 BigInt 转换为日期时间和格式
- c# - 具有多个连接和包含的 LINQ 查询不起作用
- javascript - React js,javascript没有正确过滤
- c# - 新内容页面“缺少程序集”错误
- python - 如何使用 Poetry 从特定的 git 分支安装 Stem?