【发布时间】:2019-09-03 07:22:10
【问题描述】:
我正在使用 pdfmake 在 nodejs 中生成 PDF 文件。我正在生成表格,所以对于某些列,我需要发送格式化函数。
例如,如果行有属性employee,其值可以是:
{id: 1, firstName: 'John', lastName: 'Johnson'},
为了显示此列,我使用以下格式化函数:
employee => `${employee.firstName} ${employee.lastName}`
所以对于我的 nodejs 后端,我将这个函数作为字符串发送。在此函数上调用 toString 会从上面返回带有引号的相同文本:
"employee => `${employee.firstName} ${employee.lastName}`"
然后我使用从数据库中获取的参数执行此函数。我通过调用eval来做到这一点
eval(`(${fnString})({id: 1, firstName: 'Test', lastName: 'Test'})`)
当函数中只有变量是它的参数时,这很好用。
所以这是我的问题:
假设我有这样的代码:
const prefix = 'X'
const fn = employee => `${prefix} ${employee.firstName} ${employee.lastName}`
fn.toString() 计算结果为:
"employee => `${prefix} ${employee.firstName} ${employee.lastName}`"
但我需要它是这样的:
"employee => `X ${employee.firstName} ${employee.lastName}`"
因为我无法访问prefix 变量,所以我只将函数作为字符串发送到nodejs。
有没有办法在调用 toString 方法时评估函数内部的变量?
是的,我知道,我也可以向 nodejs 发送前缀,但这并不是一个很好的解决方案,有时格式化函数可能依赖于函数定义范围内的许多变量。
是的,我知道我不应该使用 eval
【问题讨论】:
标签: javascript node.js function eval