使用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
答案 0 :(得分:1)
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);
}