連絡フォームに記入した後にメールを送信するこのルートがあります。ここExpressで1回送信した後にデータを再送信しないようにする方法
var express = require('express');
var mailRouter = express.Router();
var Mailgun = require('mailgun-js');
var api_key = 'key-xxxxxxxxxxxx';
var domain = 'xxxxxxxxxxxxxxxxx.mailgun.org';
var router = function(){
mailRouter.route('/send')
.post(function(req, res){
console.log(req.body);
var body = req.body;
var mailgun = new Mailgun({apiKey: api_key, domain: domain});
var mailOptions = {
from: body.email,
to: '[email protected]',
subject: 'Oxedio Inquiry',
text: 'Hi, I am ' + body.name + '. ' + body.message + '. You can contact me @ ' + body.phone
};
mailgun.messages().send(mailOptions, function(err, body){
if(err){
res.render('error', {error: err});
console.log(err);
} else{
res.render('success', {mail: body});
console.log(body);
};
});
});
return mailRouter;
};
module.exports = router;
問題は、ユーザーが送信ボタンをクリックしたとき、それはこのルートに行くだろうということであるユーザーは、このランディングページ上でリフレッシュすると、その後、電子メール/メッセージを送信し、電子メール/メッセージが再送されます。誰でもこれを修正する方法のヒントを教えてもらえますか?私はreq.session.destoy()を使用しようとしましたが、私はセッションがあるとは思わないので動作しません。私はsetTimeoutを試してみてから、ある時間後にホームページにリダイレクトしようとしましたが、成功メッセージが表示されていましたが、ユーザーがその時点でページを更新できるので、それは良い考えではないと思います。私が望むのは、ユーザーがページをリフレッシュすると、電子メールは1回だけ送られるということです。
それは未定義の 'mailError'プロパティを設定できません。 –
@MixAustriaああ、申し訳ありませんが、あなたが[セッション](https://www.npmjs.com/package/express-session)を使用していると誤って判断しました。私はいくつかの情報を提供するために私の答えを編集します。 – robertklep