Получить имя переменной вместо значения

Используя 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);
}
Другие вопросы по тегам