您好,感谢您的阅读。我尝试使用express-validator。如果例如名称输入为空,它工作正常并阻止帖子。但我不知道如何在正面收到错误消息。我尝试过很多事情都没有成功。希望有人可以帮助并抱歉信息的大小。如果它可以提供帮助(https://express-validator.github.io/docs/)
,这是指向快速验证器的文档的链接我的代码...... 我创建了一个基本形式:
<form id="sign-in">
<div class="form-group">
<label for="nom">name</label>
<input id="name" type="text" class="form-control" placeholder="name" autocomplete="family-name">
</div>
<div class="form-group">
<label for="username">username</label>
<input id="username" type="text" class="form-control" placeholder="username" autocomplete="given-name">
</div>
<div class="form-group">
<label for="email">email</label>
<input id="email" class="form-control" type="email" placeholder="monemail@gmail.com" autocomplete="email"></input>
</div>
<div class="form-group">
<label for="password">password</label>
<input id="password" class="form-control" type="password" autocomplete="current-password"></input>
</div>
<div class="form-group">
<label for="confirm-password">confirm-password</label>
<input id="confirm-password" class="form-control" type="password" autocomplete="current-password"></input>
</div>
<button type="submit" class="btn btn-primary">sign-in</button>
</form>
</section>
<footer>
</footer>
<script type="module" src="/js/sign-in.js"></script>
然后我对文件sign-in.js进行取指:
document.getElementById('sign-in').addEventListener('submit', event => {
event.preventDefault()
const name = document.getElementById('name').value
const username = document.getElementById('username').value
...
// Use fetch to post data into the DB
window.fetch(`${config.serverHost}/sign-in`, {
method: 'post',
body: JSON.stringify({
name,
username,
...
})
}).then((res, errors) => {
if (res.status === 200) {
window.parent.location.reload()
} else if (res.status === 422) {
DONT KNOW WHAT TO DO TO GET MY ERROR MESSAGE
}
})
})
最终服务器端:
app.post('/sign-in', (req, res, next) => {
// Start express validator //
req.checkBody('name', 'Please write your name').notEmpty()
req.checkBody('username', 'Please write your name').notEmpty()
...
const errors = req.validationErrors()
if (errors) {
SEND ME BACK MY ERROR MESSAGE
} else {
this part works fine, thank you
}
})
答案 0 :(得分:0)
根据客户端的设置方式,您有两种选择:
express-flash
或connect-flash
将错误发送回您的视图。有关差异,请参阅this。res.json
从errors
发回您创建的validationErrors()
对象。请务必同时设置适当的HTTP状态。答案 1 :(得分:0)
当我找到我发布的解决方案时,它可能对其他人有用。 这是sign-in.js文件:
.then(res => {
if (res.status !== 200) {
res.json()
.then(res => errorsMessages.innerHTML = res.map(e => `<p>${e.msg}</p>`).join(''))
} else {
window.parent.location.reload()
}
})
服务器的代码:
const errors = req.validationErrors()
if (errors) {
res.status(422).json(errors)
} else {...}
感谢Francisco的帮助。