#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') }
Дейв, спасибо за совет. Это напомнило мне о том, как анализировался ввод.