Я разрабатываю RESTful API с использованием NodeJS и Express.
Я заметил, что во входящих запросах иногда отсутствуют некоторые ожидаемые переменные, что приводит к сбою программы, говоря, что она не может установить значение переменной на'undefined'
значение - поскольку в запросе не было получено значение.
Пример:
Приложение ожидает переменную Y, но вместо этого отправляется переменная X:
formData: { variableX: 'valueX' }
Программа ожидает получения переменной Yсо следующим кодом:
const checkVariables = Joi.validate({
variableY: req.body.variableY,
}, schema);
Приложение аварийно завершает работу со следующей ошибкой:
TypeError: Cannot read property 'variableY' of undefined
Я подумал о нескольких способах справиться с этим, включая объявление переменных при запуске приложения ииспользуя их вместе, используя try-catch
.
Другим способом будет использование if-else
, if-chaining
или case-switch
, но, как вы поняли, конечно, я ищу самый чистый способ достижения этого.
Есть идеи?
Спасибо.
** РЕДАКТИРОВАТЬ **
Прогрессировал и сумел добиться результата, используя только объект.При попытке получить доступ к любому из его внутренних полей в любом случае будет выдано сообщение об ошибке, например:
if(req.body.variableY == undefined){console.log('The expected variable is undefined');} //true
Когда проверка обращается к полю внутри объекта undefined:
if(req.body.variableY.dataId == undefined){console.log('The expected variable is undefined');} //crashes
Снова выдается следующая ошибка:
TypeError: Cannot read property 'variableX' of undefined
После еще нескольких копаний нашел этот поток Stackoverflow:
Как проверить, существует ли свойство объекта с переменнойудерживая имя свойства?
Пробовал с помощью hasOwnProperty, но выдается такая же ошибка:
TypeError: Cannot read property 'hasOwnProperty' of undefined
Попытка объявления переменной обтекания с использованием try-catch
, все еще неwork:
try{
var variableX = req.body.variableX
var variableXDataId = req.body.variableX.dataId
}
catch(e){
res.status(400).send('Wrong request error: Please check your request variables and try again');
}
Так как это действительно базовая проверка, которая должна выполняться большинством API-интерфейсов RESTful (проверка того, что вы получаете ожидаемые входящие переменные внутри запроса, поэтому программа не будет аварийно завершена, еслиошибки, которые он не может обработать - каково общее решение для таких проблем (ожидаемая / неожиданная проверка запроса)?
Спасибо.