Я много осматриваюсь и не нашел четких объяснений "правильного способа" сделать:
- проверка формы (с использованием Joi или чего-либо другого)
- и, если возникнут ошибки, повторно выполните рендеринг
view
с предварительно / повторно заполненными входами с прежними данными и сообщениями об ошибках.
Есть ли у вас какие-либо подсказки об этом.
Рассмотрим простойи сократить form
ниже (мой view
= prop
):
<form action="prop" method="post">
<input
type="email"
placeholder="candidat@email.com"
name="email"
/>
<input type="number" placeholder="06 xx xx xx xx" name="phone"/>
<input type="number" name="sne" />
<select name="type">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button type="submit">Send</button>
</form>
Упрощенный controller
ниже (в псевдокоде):
router.post('/', async (req, res) => {
// Build prop object
const propToValidate = {
EMAIL: req.body.email,
PHONE: req.body.phone,
SNE: Number(req.body.sne),
}
const isValid = Joi.validate(propToValidate, schema, { stripUnknown: true })
// result.error == null means valid
if (isValid) {
await saveProp(prop)
res.redirect(`/app/dashboard`)
}
if (!isValid) {
???????????
}
})
У вас естьлюбая подсказка (может быть, некоторые лучшие практики) для повторного рендеринга моего prop
view
с прежними предварительно заполненными данными и ошибками от Joi ...
Я бы предпочел делать все на стороне сервера, так что нетпередний JS, если это возможно.