質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

877閲覧

nodemailerで送信したあとに、無限ループが始まりredirectでページジャンプできません!

madamdaama

総合スコア45

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2022/02/01 09:02

編集2022/02/05 08:45

制作中のホームページの問い合わせフォームで、nodemailerでGmailを送信させたあとに、「メッセージは送信されました」と表記されたページ('/aftercontact')へredirectしたいのですが、されません。
メールはちゃんと送信されるのですが、その後の処理がなされないようでページ移動することなく、無限ループが始まりredirectは処理されません。

該当部のコードは以下の通りです。

node.js

1const transporter = nodemailer.createTransport({ 2 host: "smtp.gmail.com", 3 port: 465, 4 secure: true, 5 auth: { 6 type: 'OAuth2', 7 user: process.env.EMAILADDRESS, 8 pass: process.env.EMAIL_PASSWORD, 9 clientId: process.env.CLIENTID, 10 clientSecret: process.env.CLIENT_SECRET, 11 refreshToken: process.env.REFRESH_TOKEN, 12 } 13}); 14 15 16app.post('/contact', (req, res, next) => { 17 const username = req.body.username; 18 const useremail = req.body.useremail; 19 const usermessege = req.body.usermessege; 20 const errors = []; 21 22 23 if (username === '') { 24 errors.push('お名前がありません!'); 25 } 26 if (useremail === '') { 27 errors.push('メールアドレスがありません!'); 28 } 29 if (usermessege === '') { 30 errors.push('メッセージがありません!'); 31 } 32 if (errors.length > 0) { 33 res.render('contact.ejs', { errors: errors }); 34 } else { 35 next(); 36 } 37}, 38 (req, res) => { 39 const username = req.body.username; 40 const useremail = req.body.useremail; 41 const usermessege = req.body.usermessege; 42 const mailOptions = { 43 from: process.env.EMAILADDRESS, 44 to: process.env.EMAILADDRESS2, 45 subject: '問い合わせ', 46 text: 'From:' + ' ' + username + ' ' + '/Email:' + ' ' + useremail + ' ' + '/Message:' + ' ' + usermessege 47 }; 48 49 transporter.sendMail(mailOptions, function (error, info) { 50 if (error) { 51 console.log(error); 52 } else { 53 console.log(Email_sent); 54 res.redirect('/aftercontact'); 55 } 56 }); 57 58 });

ページにredirectされないだけではなく、ターミナルにconsole.log(Email_sent)されないので、何かしら問題があるのでしょうがわかりません。
('/aftercontact')のページは’localhost:3000/aftercontact’で表示されるので、('/aftercontact')ページ自体には問題ないと思うのですが、クロームのデベロッパーツールを使うと、

Failed to load resource: the server responded with a status of 404 (Not Found)   send url.js:1

と表示されるので、転送先urlが認識されていないようです。
全てのページファイルは同じディレクトリに保存されています。
何か原因があるのでしょうか? 

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

console.log(Email_sent);

のEmail_sentを、’Email_sent’とクォーテーションで囲んでいないために、変数扱いされたのにも関わらず変数を定義していなかったために、そこで処理が進まずにプログラムが終わらなかったようです。クォーテーションで囲めば、無事にターミナルにEmail_sentと表示され、さらにはredirectもされるようになりました。

投稿2022/02/07 11:01

madamdaama

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問