首页 > 解决方案 > 我如何在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'

标签: javascriptnode.js

解决方案


一个警告;我认为其他答案是正确的,正确的方法是让您的配置成为一个对象,您可以在其中查找值。

这意味着您的配置代码,而不是看起来像:

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 /")如果你碰巧编译并运行它,你就不会觉得好笑!

此外,您可以想象,每次要查找变量时都编译新代码会很慢。

因此,尽管您在技术上可以做到这一点,但我敦促您不要这样做,而是采用更安全、更快的方法将您的配置定义为对象。


推荐阅读