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

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

新規登録して質問してみよう
ただいま回答率
87.20%
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クリップ

6281閲覧

投稿2022/01/26 11:41

前提・実現したいこと

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

xg63ex2b

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で質問しよう!

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Node.js

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

Express

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