获取变量名而不是值

时间:2018-09-17 22:51:28

标签: javascript node.js reflection reflect

使用bash,我认为这是可能的,但对于JavaScript尚不确定,请说我们有以下内容:

    const {masterid} = req.query;

    if (!masterid) {
        return res.status(500).send(new Error('Missing query param "masterid".'));
    }

我想做的是在字符串中不是硬编码“ masterid”,而是执行以下操作:

    const {masterid} = req.query;

    if (!masterid) {
        return res.status(500).send(new Error(`Missing query param "${Reflect(masterid).name()}.".`));
    }

是否可以使用Reflect API做到这一点?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect

2 个答案:

答案 0 :(得分:1)

来自this other post

var masterid = 2;
var text = Object.keys({masterid})[0]; //equals "masterid"

答案 1 :(得分:1)

这可能用于测试/调试目的,但在生产中不合适。唯一的方法是以某种方式篡改它,例如解析,修改和评估。例如,rewire使用eval拦截顶级模块变量,这种方法不适用于范围变量。

由于这些JavaScript限制,一种正确的方法是不依赖变量。处理属性名称不会有任何问题。断言在Node中很常见,这种情况下可以利用helper函数:

assertParam(obj, param) {
  assert.ok(obj[param], `Missing param "${param}".`);
}

...

try {
  assertParam(req.query, 'masterid');
} catch (err) {
  return res.status(500).send(err);
}