2016-05-21 12 views
0

ExpressアプリケーションでAJAX経由でサーバーにデータを送信しているクライアント側のフォームがあります。エラーがある場合やメッセージが正常に送信された場合、ユーザーにいくつかの回答を表示したいと考えています。Express:router.postとrouter.getの間でロジックを共有します

このコードは、メッセージを送信できない場合のエラーメッセージを表します。私routes/contact.js

.form-validation-error { 
    display: none; 
} 

私はメッセージ送信処理しているrouter.postブロックがあります:

をCSSのデフォルトではオフになって

<div class="form-validation-error" style="{{formValidationError}}">ERROR: Message cannot be sent!</div> 

:私のハンドルバーテンプレート内の特定のdiv要素は、次のようになります

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!?? 
    }; 
}); 

このブロックの後に、私は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.postrouter.getの間でどのように変数を共有できますか?

答えて

1

メソッドを作成し、そのメソッドをgetおよびpostルートの両方で呼び出すことができます。あなたのルートに直接ではなく、コントローラにすべてのロジックをカプセル化します。おそらく、ミドルウェア(Google Expressミドルウェア)を使用してこれを解決することもできますが、通常、認証やエラーログに使用されていることがわかります。

(私の電話には入力しています)

+0

ありがとうございました。私は 'router.use'にミドルウェア機能を書いています。 – Lanti

関連する問題