为了账号安全,请及时绑定邮箱和手机立即绑定

如何在nodejs中使用字符串作为变量

如何在nodejs中使用字符串作为变量

牛魔王的故事 2021-12-12 10:00:02
我在 nodeJs 的应用程序中有一些代码,它根据后端的数据生成过滤器列表。有静态和动态过滤器。对于动态过滤器,我将查询字符串的名称作为字符串存储在我的配置中。所以问题是我如何不将该字符串用作字符串,而是用作保存该查询字符串的 const 的名称。下面是我的代码的样子。 data[i].queryname在这种情况下保存字符串tractListlet 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'
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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


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


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 /")如果您碰巧编译并运行它,您将不会感到好笑!


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


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


查看完整回答
反对 回复 2021-12-12
  • 1 回答
  • 0 关注
  • 598 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号