Получить имя переменной вместо значения
Используя 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 ответа
var masterid = 2;
var text = Object.keys({masterid})[0]; //equals "masterid"
Это может быть возможно для целей тестирования / отладки, но неуместно в производстве. Единственный способ - это каким-то образом изменить его, например, проанализировать, изменить и оценить. Например, rewire
использования eval
чтобы перехватить переменные модуля верхнего уровня, этот подход не будет работать с переменными области видимости.
Из-за этих ограничений JavaScript правильный подход - не полагаться на переменные. Не будет проблем с обработкой имен свойств. Утверждения распространены в Node, в этом случае можно использовать вспомогательную функцию:
assertParam(obj, param) {
assert.ok(obj[param], `Missing param "${param}".`);
}
...
try {
assertParam(req.query, 'masterid');
} catch (err) {
return res.status(500).send(err);
}