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

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

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

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

Q&A

解決済

1回答

1360閲覧

サーバーからの応答を反映したいが、ダウンロードされしまう

hosino94707985

総合スコア5

Node.js

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

0グッド

0クリップ

投稿2020/05/25 08:00

前提・実現したいこと

Node.jsを学ぼうと思い、サンプルコードを真似て、簡単なチャットシステムを作ろうとしています
まだ初期段階で、サーバーからの返答をブラウザで表示しようとしています。

プログラム自体は問題なく動いているようですが、非常に不便なことが発生したので、質問します。

発生している問題

ローカルでサーバーを起動し、
ブラウザからアクセスしたときに、

サーバーからの応答の内容をそのまま表示したいのですが
サーバーからの応答がブラウザで【ダウンロード】されてしまいます。

該当のソースコード

javascript

1//setting.js 2exports.port = 1337; 3exports.host = "127.0.0.1";

javascript

1//server.js 2var http = require('http'); 3 fs = require('fs'); 4 ejs = require('ejs'); 5 qs = require('querystring'); 6var settings = require('./setting'); 7var server = http.createServer(); 8var template = fs.readFileSync("public_html/bbs.ejs","utf-8"); 9var posts = []; 10function renderForm(posts, res){ 11 var data = ejs.render(template,{ 12 posts: posts 13 }); 14 res.writeHead(200,{'Content-Type': 'test/html'}) 15 res.write(data); 16 res.end(); 17 console.log("request!!!!"); 18} 19server.on('request',function(req, res){ 20 console.log("request!!!!"); 21 if(req.method === 'POST'){ 22 console.log("request!!!!"); 23 req.data = ""; 24 req.on("readable", function(){ 25 req.data += req.read(); 26 }); 27 req.on("end", function(){ 28 var query = qs.parse(req.data); 29 posts.push(query.name); 30 renderForm(posts,res); 31 }); 32 }else{ 33 renderForm(posts, res); 34 } 35}); 36 37server.listen(settings.port, settings.host); 38console.log("server listening");

javascript

1//public_html/bbs.ejs 2<!DOCTYPE html> 3<html lang="ja"> 4 <head> 5 <meta charset="utf-8"> 6 <title>BBS</title> 7 </head> 8 <body> 9 <form method="POST"> 10 <input type="text" name= "name"> 11 <input type="submit" value="Post!"> 12 <ul> 13 <% for (var i = 0; i < posts.length; i++){ %> 14 <li><%= posts[i] %></li> 15 <% } %> 16 </ul> 17 </form> 18 </body> 19</html>

試したこと

chrome,firefox,IEでアクセスしてみましたが全てうまくいきませんでした。
chrome,firefoxではダウンロードされ、IEでは【ダウンロードディレクトリにアクセスできませんでした。】と表示されました。

<form>のaction属性に127.0.0.1と指定すると、サーバーからの返答はちゃんと表示されていました。ただし、ダウンロードのフォルダにはファイルが増えていっています。

補足情報(FW/ツールのバージョンなど)

環境は
windows10 64bit
node -v //// v12.16.3
npm -v //// 6.14.4
です。

調べても同じような例が出てこなかったので、かなり基本的なところなのかと思いますが、教えてくれると嬉しいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

MimeType が違います。

Content-Type: "text/html" を typo して test/html になっているため、Express が application/octet-stream で応答し、Content-Disposition を付与しているのかもしれません。

投稿2020/05/25 08:41

AkitoshiManabe

総合スコア5432

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

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

hosino94707985

2020/05/25 09:56

ありがとうございます。解決しました。 動かないときはタイプミスを疑っていきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問