前提・実現したいこと
Node.jsのExpressを使って掲示板サイトを作っています。
しかし、投稿ボタンを押してもデーターのファイルに投稿のデータが保存されません。
なぜでしょうか。
発生している問題・エラーメッセージ
ブラウザコンソールにエラーはありませんでした。
該当のソースコード
javascript
const request = require('request'); const express = require('express'); const fs = require('fs'); const vhost = require('vhost'); const cookie = require('cookie-parser'); const https = require('https'); const ws = require('ws'); const app = new express(); var options = { key: fs.readFileSync('/etc/letsencrypt/live/ots-yuina.net/privkey.pem'), cert: fs.readFileSync('/etc/letsencrypt/live/ots-yuina.net/fullchain.pem') } var server = https.createServer(options, app); server.listen(443); const aochugi = new express(); app.use(vhost('aochugi.com', aochugi)); app.use(cookie()); function formattedDateTime(date) { const y = date.getFullYear(); const m = ('0' + (date.getMonth() + 1)).slice(-2); const d = ('0' + date.getDate()).slice(-2); const h = ('0' + date.getHours()).slice(-2); const mi = ('0' + date.getMinutes()).slice(-2); const s = ('0' + date.getSeconds()).slice(-2); return y + '年' + m + '月' + d + '日' + h + '時' + mi + '分' + s + '秒'; } //中略 app.get('/aochugi-main', function(req, res){ var contents = ''; console.log('aaa'); if (req.query.content != undefined) { if (req.query.content != '') { while (req.cookies['cooldown']) { res.cookie('cooldown', '100000'); } var num = Date.now(); if (Number(num) - Number(req.cookies['cooldown']) >= 5000) { var data = JSON.parse(fs.readFileSync('aochugi/main.json', {encoding: 'utf-8'})); var date = new Date(); var name = '匿名'; if (req.query.name != '') { name = req.query.name; res.cookie('name', name); } var content = req.query.content; for (let i = -1;content.indexOf('\n') > i;i++) { content = content.replace('\n', '<br>'); console.log('あああ'); } data['contents'].push({'id':data['len'], 'content': req.query.content.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'').replace('\n', '<br>'), 'ip': req.ip, 'time': formattedDateTime(date), 'name': name}); data['len'] += 1; fs.writeFileSync('aochugi/main.json', JSON.stringify(data), {encoding: 'utf-8'}); res.cookie('cooldown', String(Date.now())); } 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>'); } else { console.log('aaa'); } } else { var name = ''; if (req.cookies['name'] != undefined) { name = req.cookies['name']; } var data = JSON.parse(fs.readFileSync('aochugi/main.json', {encoding: 'utf-8'})); for (let i = 0;i < data['len'];i++) { contents = '\n<p>' + data['contents'][i]['id'] + ' ' + data['contents'][i]['time'] + '<br>名前:' + data['contents'][i]['name'] + '<br>' + data['contents'][i]['content'] + '</p>' + contents; } res.send(`<!DOCTYPE html>\ <html>\ <head>\ <script type="module" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>\ <script src="https://cdnjs.cloudflare.com/ajax/libs/push.js/1.0.7/push.min.js"></script>\ <title>煽れよちゅぎちゅん</title>\ <meta charset="utf-8">\ </head>\ <body>\ <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>\ <style>\ .reload {color: red;}\ </style>\ <h1 class="title">煽れよちゅぎちゅんへようこそ!!</h1>\ <p>この掲示板はリア友の軽いノリで作られた掲示板です。<br>煽ちゅぎ教祖のs(自主規制)の思い付きでゆいなが作りました。<br>マナーは守ってね</p>\ <form action="/aochugi-main" class="submit-form">\ <div class="submit-form">\ <label for="content">内容:</label>\ <textarea name="content" rows="3" cols="150" wrap="hard" id="content"></textarea>\ <br><label for="name">名前:</label>\ <input name="name" value="${name}"></input>\ </div>\ <div class="submit-form">\ <input type="submit" value="投稿">\ </div>\ </form>\ <div id="reload"><a class="reload" href="/aochugi-main">再読み込み</a></div>\ ${contents}\ </body>\ </html>`); } });
長くてすいません
試したこと
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
まだ回答がついていません
会員登録して回答してみよう