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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

764閲覧

Node.jsの実行時のエラー

Abenosan

総合スコア25

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/08/21 00:17

編集2018/08/21 00:52

現在Node.jsの勉強をしており、教材のサンプルコードを入力したところ、エラーが出てしまいます。
ejsも導入済みですし、何も問題ないかと思われます。

ejs側のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta hyttp-equiv="content-type" content="text/html; charset=UTF-8"> <title>ミニ掲示板</title> <link type="text/css" href="./style.css" rel="stylesheet"> <script> function init(){ var id = localStorage.getItem('id'); if(id == null){ location.href ='./login'; } document.querySelector('#id').textContent = 'ID:' + id; document.querySelector('#id_input').value = id; } </script> </head> <body onload="init();"> <head> <h1>掲示板</h1> </head> <div role = "main"> <p>※メッセージは最大10個まで保管されます</p> <form method="post" action="/"> <p><span id="id"></span> <input type="hidden" id="id_input" name="id" value=""></p> <p><input type="text" name="msg"> <input type="submit" value="送信"></p> </form> <hr> <p><table style="width:85%;"> <% for(var i in data) { %> <%- include('data_item',{val:data[i]}) %> <% } %> </table></p> </div> </body> </html>
const http = require('http'); const fs = require('fs'); const ejs = require('ejs'); const url = require('url'); const qs = require('querystring'); const index_page = fs.readFileSync('./index.ejs', 'utf8'); const login_page = fs.readFileSync('./login.ejs', 'utf8'); const style_css = fs.readFileSync('./style.css', 'utf8'); const max_num = 10; const filename = 'mydata.txt'; // データファイル名 var message_data; // データ readFromFile(filename); var server = http.createServer(getFromClient); server.listen(3000); console.log('ほないこけ'); // ここまでメインプログラム // createServerの処理 function getFromClient(requset,response){ var url_parts = url.parse(requset.url,true); switch(url_parts.pathname){ case '/': response_index(requset.response); break; case '/login': response_login(requset.response); break; case '/style.css': response.writeHead(200 ,{'Content-Type': 'text/css'}); response.write(style_css); response.end(); break; default: response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('no.page....'); break; } } // Loginのアクセス処理 function response_login(requset,response){ var content = ejs.render(login_page,{}); response.writeHead(200, {'Content-Type': text/html}); response.weite(content); response.end(); } // indexのアクセス処理 function response_index(request,response){ // Post 処理 if(request.method == 'POST'){ var body = ''; request.on('data',function(data){ body += data; }); // データ受信終了のイベントを処理 request.on('end',function(){ data = qs.parse(body); addToData(data.id, data.msg, filename,request); //? write_index(request,response); }); }else{ write_index(request,response); } } // indexのページ作成 function write_index(requset,response){ var msg = "※何かコメントを書いてください"; var content = ejs.render(index_page,{ title:'Index', content:msg, data:message_data, filename:'data_item', }); response.writeHead(200, {'Content-type':'text/html'}); response.write(content); response.end(); } //テキストファイルをロード function readFromFile(fname){ fs.readFile(fname, 'utf8',(err,data)=>{ message_data = data.split('/n'); }) } //データを更新 function addToData(id,msg,fname,request){ var obj = {'id':id,'msg':msg}; var obj_str = JSON.stringify(obj); console.log('add data:' + obj_str); message_data.unshift(obj_str); if(message_data.lenght > max_num){ message_data.pop(); } saveToFile(fname); } //データ保存 function saveToFile(fname){ var data_str = message_data.join('/n'); fs.writeFile(fname, data_str,(err)=>{ if(err){throw err;} }); }

エラーコード

PS C:\Users***name***\Desktop\作品\mini_board> node app.js ほないこけ C:\Users***name***\Desktop\作品\mini_board\app.js:59 if(request.method == 'post'){ ^ TypeError: Cannot read property 'method' of undefined at response_index (C:\Users***name***\Desktop\作品\mini_board\app.js:59:16) at Server.getFromClient (C:\Users***name***\Desktop\作品\mini_board\app.js:28:13) at emitTwo (events.js:126:13) at Server.emit (events.js:214:7) at parserOnIncoming (_http_server.js:619:12) at HTTPParser.parserOnHeadersComplete (_http_common.js:112:17)

引用テキスト

とでます。

エラーコードを読んでみると
TypeError: Cannot read property 'method' of undefined
と表示されていて、ejs側のinput部分も確認し、問題ないかとおもいます。

簡単なご説明になりましたが、よろしくお願いします。

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

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

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

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

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

yukihisa

2018/08/21 01:14

何も問題がないなら動くはずで、動かないのは何か問題があるからです。「問題ないと思われる」のではなく、「何処が問題なのかわからない」と書くべきです。「問題ないならそのままやればいいのに」と回答がつきにくくなります。エラー自体はrequestにmethodメンバが定義されていない、というエラーなので既にある回答からどのようにしたらいいか考えてみてください。
Abenosan

2018/08/21 01:17

ご質問の指摘をしていただきありがとうございます。今後気を付けます。
guest

回答2

0

ベストアンサー

綴りが違うからだと思います。
あとなぜか「requset.response」になっていますがこれも
コンマが本来正しいのでは?

response_index(requset.response);
response_index(request,response);

javascript

1// createServerの処理 2function getFromClient(requset,response){ 3 var url_parts = url.parse(requset.url,true); 4 switch(url_parts.pathname){ 5 6 case '/': 7 // ここ!requset ✕ request ◯ 8 response_index(requset.response); 9 break; 10 11 case '/login': 12 response_login(requset.response); 13 break; 14 15 case '/style.css': 16 response.writeHead(200 ,{'Content-Type': 'text/css'}); 17 response.write(style_css); 18 response.end(); 19 break; 20 default: 21 response.writeHead(200, {'Content-Type': 'text/plain'}); 22 response.end('no.page....'); 23 break; 24 } 25}

投稿2018/08/21 01:13

sousuke

総合スコア3828

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

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

Abenosan

2018/08/21 01:33

ご質問する前に、綴りの確認をしてから投稿させていただきます。 ありがとうございました。
guest

0

requestresponseというパラメーターから想像するに、Webサーバとして使うのが前提のコードではないかと思われます。コンソールから実行した場合、requestという概念はないでしょう。

投稿2018/08/21 00:25

maisumakun

総合スコア145184

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

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

Abenosan

2018/08/21 00:35

ご回答ありがとうございます。といいますと、Webserverとして、この記述は間違っているってことでしょうか?勉強不足で申し訳ありません。
maisumakun

2018/08/21 00:41

どちらにしても、コードが断片的すぎて、正確なことが何も言えません。
Abenosan

2018/08/21 00:53

修正しました。お忙しいところ申し訳ありませんが、ご確認いただけだら幸いです・・・ 簡単な掲示板を作るソースコードとなっております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問