переменная не определена в nodejs… но только время от времени. Я явно что-то упускаю, но что?

#node.js #express

Вопрос:

У меня есть форма, которая работает большую часть времени и работала до тех пор, пока я не добавил проверку ввода в код. Если я предоставлю действительные данные, все будет работать нормально. Значение сохраняется в БД, и ошибок нет. Однако, когда я ввожу неверные данные в форму, она возвращает следующее:

 invalid input ReferenceError: E:reposscantoolscantoolviewsscan_targetsnew.ejs:4 2| 3| lt;form action="/scan_targets" method="POST"gt; gt;gt; 4| lt;%- include('_form_fields') %gt; 5| lt;a href="/scan_targets"gt;Cancellt;/agt; 6| lt;button type="submit"gt;Addlt;/buttongt; 7| lt;/formgt;  E:reposscantoolscantoolviewsscan_targets_form_fields.ejs:2 1| lt;labelgt;Host name or IPlt;/labelgt; gt;gt; 2| lt;input type="text" name="host" value ="lt;%- scantarget.host%gt;"gt; 3|  scantarget is not defined at eval (eval at compile  (E:reposscantoolscantoolnode_modulesejslibejs.js:662:12), lt;anonymousgt;:12:17) at _form_fields (E:reposscantoolscantoolnode_modulesejslibejs.js:692:17) at include (E:reposscantoolscantoolnode_modulesejslibejs.js:690:39) at eval (eval at compile  (E:reposscantoolscantoolnode_modulesejslibejs.js:662:12), lt;anonymousgt;:12:17) at new (E:reposscantoolscantoolnode_modulesejslibejs.js:692:17) at tryHandleCache (E:reposscantoolscantoolnode_modulesejslibejs.js:272:36) at View.exports.renderFile [as engine]  (E:reposscantoolscantoolnode_modulesejslibejs.js:489:10)  at View.render (E:reposscantoolscantoolnode_modulesexpresslibview.js:135:8) at tryRender  (E:reposscantoolscantoolnode_modulesexpresslibapplication.js:640:10) at Function.render  (E:reposscantoolscantoolnode_modulesexpresslibapplication.js:592:3)  

Вот соответствующий код в маршрутах:

 router.post('/', async (req, res) =gt; {  const scantarget = new scanTarget({  host: req.body.host })  //input validation. valid input has undefined error const { error, value } = schema.validate({ host_or_ip: scantarget.host });  if ( error === undefined ) {  try {  const newscanTarget = await scantarget.save()  res.redirect('scan_targets')  } catch {  res.render('scan_targets/new', {  scantarget: scantarget,  errorMessage: 'error adding scan target'  })  } }else{  res.render('scan_targets/new', {  errorMessage: 'invalid input type'  })  console.log('invalid input') }   })  module.exports = router  

Пожалуйста, помогите. Я начинал с этого весь день и думаю, что это просто что-то очевидное и глупое, чего мне не хватает.

Комментарии:

1. Если error === undefined scantarget это не является частью данных рендеринга, но без знания того, что на самом деле происходит, это всего лишь предположение.

Ответ №1:

ОК… Я все понял. Я изменил остальную часть кода:

 }else{ //todo: fix output of error  res.render('scan_targets/new', {  scantarget: scantarget,  errorMessage: 'invalid input type'  })  console.log('invalid input') }  

Дейв, спасибо за совет. Это напомнило мне о том, как анализировался ввод.