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

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

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

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

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

受付中

ExpressのサイトにGETしても動かない

yuina8686
yuina8686

総合スコア12

Node.js

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

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0回答

0グッド

0クリップ

6611閲覧

投稿2022/01/26 11:41

前提・実現したいこと

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でどこでエラーが発生しているかの特定を試みました。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

退会済みユーザー

退会済みユーザー

2022/01/27 08:39

`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

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Node.js

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

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。