我的客户端有一个表单,它在我的 Express 应用程序中通过 AJAX 向服务器发送数据。我想在出现错误或消息发送成功时向用户显示一些响应。
此代码代表消息无法发送时的错误消息。我的 Handlebars 模板中的特定 div 如下所示:
<div class="form-validation-error" style="{{formValidationError}}">ERROR: Message cannot be sent!</div>
CSS 默认关闭:
.form-validation-error {
display: none;
}
在我的routes/contact.js
中,我有一个router.post
block ,它正在处理消息发送:
router.post('/', (req, res, next) => {
if(req.body.firstname.length === 0 || !req.body.firstname.match(/\D+/igm)) {
var validateFirstname = false;
} else {
var validateFirstname = true;
};
if(req.body.captcha.length === 0 || !req.body.captcha.match(/^kettő|ketto|two$/igm)) {
var validateCaptcha = false;
} else {
var validateCaptcha = true;
};
if(validateFirstname === true && validateCaptcha === true) {
console.log('SUCCESS: Form validated! The Nodemailer script will be here!');
} else {
console.log('ERROR: Form not validated!');
const formValidationErrorTrue = 'display: block;'; // -> How can I achieve this!??
res.send({formValidationError: 'display: block;'}); // -> Or this!??
};
});
在这个 block 之后,我有一个 router.get
模板渲染部分:
router.get('/', (req, res, next) => {
fsAsync((err, data) => {
if(err) {
res.render('404', {
title: 'Error 404'
});
}
const contact = data[2].contact;
res.render('contact', {
title: 'Contact',
data: contact,
formValidationError: formValidationErrorTrue // -> How can I achieve this!??
});
});
});
我的问题是,如何在 router.post
和 router.get
之间共享变量?
最佳答案
您可以创建一个方法并在 get 和 post 路由中调用该方法。我会将所有逻辑封装在 Controller 中,而不是直接封装在您的 route 。也许您也可以使用中间件(google express 中间件)来解决这个问题,但我通常看到它被用于身份验证或错误日志记录。
(很抱歉回答简短。我正在手机上打字)
关于javascript - Express:router.post 和 router.get 之间共享逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37366513/