
前提・実現したいこと
Node.jsのExpressを使って掲示板サイトを作っています。
しかし、投稿ボタンを押してもデーターのファイルに投稿のデータが保存されません。
なぜでしょうか。
発生している問題・エラーメッセージ
ブラウザコンソールにエラーはありませんでした。
該当のソースコード
javascript
1const request = require('request'); 2const express = require('express'); 3const fs = require('fs'); 4const vhost = require('vhost'); 5const cookie = require('cookie-parser'); 6const https = require('https'); 7const ws = require('ws'); 8 9const app = new express(); 10 11var options = { 12 key: fs.readFileSync('/etc/letsencrypt/live/ots-yuina.net/privkey.pem'), 13 cert: fs.readFileSync('/etc/letsencrypt/live/ots-yuina.net/fullchain.pem') 14} 15var server = https.createServer(options, app); 16 17server.listen(443); 18 19const aochugi = new express(); 20app.use(vhost('aochugi.com', aochugi)); 21 22app.use(cookie()); 23 24function formattedDateTime(date) { 25 const y = date.getFullYear(); 26 const m = ('0' + (date.getMonth() + 1)).slice(-2); 27 const d = ('0' + date.getDate()).slice(-2); 28 const h = ('0' + date.getHours()).slice(-2); 29 const mi = ('0' + date.getMinutes()).slice(-2); 30 const s = ('0' + date.getSeconds()).slice(-2); 31 32 return y + '年' + m + '月' + d + '日' + h + '時' + mi + '分' + s + '秒'; 33 } 34 35//中略 36 37app.get('/aochugi-main', function(req, res){ 38 var contents = ''; 39 console.log('aaa'); 40 if (req.query.content != undefined) { 41 if (req.query.content != '') { 42 while (req.cookies['cooldown']) { 43 res.cookie('cooldown', '100000'); 44 } 45 var num = Date.now(); 46 if (Number(num) - Number(req.cookies['cooldown']) >= 5000) { 47 var data = JSON.parse(fs.readFileSync('aochugi/main.json', {encoding: 'utf-8'})); 48 var date = new Date(); 49 var name = '匿名'; 50 if (req.query.name != '') { 51 name = req.query.name; 52 res.cookie('name', name); 53 } 54 var content = req.query.content; 55 for (let i = -1;content.indexOf('\n') > i;i++) { 56 content = content.replace('\n', '<br>'); 57 console.log('あああ'); 58 } 59 data['contents'].push({'id':data['len'], 'content': req.query.content.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'').replace('\n', '<br>'), 'ip': req.ip, 'time': formattedDateTime(date), 'name': name}); 60 data['len'] += 1; 61 fs.writeFileSync('aochugi/main.json', JSON.stringify(data), {encoding: 'utf-8'}); 62 res.cookie('cooldown', String(Date.now())); 63 } 64 res.send('<!DOCTYPE html><html><head><title>waiting</title><meta charset="utf-8"></head><body><p>自動でリダイレクトします。しない場合は<a href="/aochugi-main">こちら</a></p><script>var sock = new WebSocket("wss://ots-yuina.net:8080");sock.addEventListener("open", function(e){sock.send("new");location.href = "https://" + location.host + "/aochugi-main";});</script></body></html>'); 65 } else { 66 console.log('aaa'); 67 } 68 } else { 69 var name = ''; 70 if (req.cookies['name'] != undefined) { 71 name = req.cookies['name']; 72 } 73 var data = JSON.parse(fs.readFileSync('aochugi/main.json', {encoding: 'utf-8'})); 74 for (let i = 0;i < data['len'];i++) { 75 contents = '\n<p>' + data['contents'][i]['id'] + ' ' + data['contents'][i]['time'] + '<br>名前:' + data['contents'][i]['name'] + '<br>' + data['contents'][i]['content'] + '</p>' + contents; 76 } 77 res.send(`<!DOCTYPE html>\ 78 <html>\ 79 <head>\ 80 <script type="module" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>\ 81 <script src="https://cdnjs.cloudflare.com/ajax/libs/push.js/1.0.7/push.min.js"></script>\ 82 <title>煽れよちゅぎちゅん</title>\ 83 <meta charset="utf-8">\ 84 </head>\ 85 <body>\ 86 <script>var count = 0;const sock = new WebSocket("wss://ots-yuina.net:8080");sock.addEventListener("message", e => {count += 1;var el = document.getElementById("reload");el.innerHTML = "<a class='reload' href='/aochugi-main'>再読み込み 新着あり(" + String(count) + ")</a>";Push.create("新着", {body: "新着の投稿があります", onClick: function(){window.focus();location.reload();this.close();}});});</script>\ 87 <style>\ 88 .reload {color: red;}\ 89 </style>\ 90 <h1 class="title">煽れよちゅぎちゅんへようこそ!!</h1>\ 91 <p>この掲示板はリア友の軽いノリで作られた掲示板です。<br>煽ちゅぎ教祖のs(自主規制)の思い付きでゆいなが作りました。<br>マナーは守ってね</p>\ 92 <form action="/aochugi-main" class="submit-form">\ 93 <div class="submit-form">\ 94 <label for="content">内容:</label>\ 95 <textarea name="content" rows="3" cols="150" wrap="hard" id="content"></textarea>\ 96 <br><label for="name">名前:</label>\ 97 <input name="name" value="${name}"></input>\ 98 </div>\ 99 <div class="submit-form">\ 100 <input type="submit" value="投稿">\ 101 </div>\ 102 </form>\ 103 <div id="reload"><a class="reload" href="/aochugi-main">再読み込み</a></div>\ 104 ${contents}\ 105 </body>\ 106 </html>`); 107 } 108});
長くてすいません
試したこと
console.logでどこでエラーが発生しているかの特定を試みました。

`while (req.cookies['cooldown']) {`
の部分ですが、無限ループにならないでしょうか?
`if (Number(num) - Number(req.cookies['cooldown']) >= 5000) {`
Cookieの設定のタイミングも少し気になりました。
このifは正しく判断できていますでしょうか?
> ブラウザコンソールにエラーはありませんでした。
Expressの`console.log`はブラウザーではなく、Expressを起動したターミナルに出力されていないでしょうか?
Express のデバッグも検討してみると良いかもしれません。
http://expressjs.com/ja/guide/debugging.html
あなたの回答
tips
プレビュー