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

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

新規登録して質問してみよう
ただいま回答率
85.50%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

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

JavaScript

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

1回答

1346閲覧

node.jsの基本的な部分で混乱しております!

退会済みユーザー

退会済みユーザー

総合スコア0

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

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

JavaScript

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2016/01/25 05:03

編集2016/01/25 05:20

node.jsの勉強をサーバーサイドの言語習得の為に最近始めたばかりのものです。

とりあえず、フレームワークは使わずに何か学習目的で作ってみようとコードを書き始めたところなのですが、サーバーサイドの知識自体が乏しい為か、基礎的なところで理解できないところがあり混乱しております。

その点をクリアにする為に質問をさせて頂きたいのですが、どなたかご教授頂けますでしょうか?

###混乱している点

ウェブはステートレスでページが再読み込みされたり、他のページが読み込まれてしまうと、セッションやクッキーに保存しておいたデータを読み取らない限り、ページ読み込み前の情報は消えてしまうものであると認識しております。

しかし、昨日書き始めたコードを実行して、ページを読み込んでみると、セッションやクッキーの処理などまだ実装していないのにも関わらず、ページ読み込み前の情報が保存されていて、その情報をページ読み込み後も引き継げていることに気がつきました。

その挙動を確認できるのが、以下に掲載している2つ目のserver.js内のonRequest関数の中で実行している以下の2行の部分です。

app.urlHistory.push(request.url); //リクエストがあったurlをapp.urlHistory配列に格納 console.log(app.urlHistory);

ここのログ出力をページ読み込みをするたびに確認すると、読みこむ度に配列に入っているurlが増えて行くのです。
※違うブラウザーでアクセスしても配列にurlが追加されていきます。

これはどういうことが起きているのでしょうか?

サーバーとか知識が乏しくよく理解出来ていないのですが、とりあえず、ターミナルで"node app.js"と実行するとコードが読まれて実行されて、ブラウザーでページを読み込んだり、再読み込みをすると、server.js内のonRequest関数だけが呼ばれていることは確認出来ております。

うまく言葉でまとめることが出来ていないのですが、自分の今までの認識ですと、ページを読みこむ度にonRequest関数以外の部分も全て、再度、読み込まれて初期化されて実行されるものなのかと思っていたのですが、、、、

ん。。。サーバーサイドとクライアントサイドの考えがごっちゃになってしまっているのでしょうか。
よくわかりません。

###app.js

node.js

1var server = require("./server.js"); 2var test1 = require("./test1.js"); 3var test2 = require("./test2.js"); 4 5 6var App = function(){ 7 8 this.request = {}; 9 this.response = {}; 10 11 var _middlewares = []; //関数オブジェクトを入れておく配列 12 var _middlewaresQue = []; //実行する関数オブジェクトをキューとして入れておく配列 13 14 this.urlHistory = []; 15 16 this.registerMiddleware = function(middleware){ 17 18 _middlewares.push(middleware); 19 _middlewaresQue.push(middleware); 20 21 } 22 23 this.callNextMiddleware = function(error){ 24 25 if (error) { 26 //エラーオブジェクトが渡された場合はエラーハンドラーへ飛ばす 27 } 28 29 30 var nextMiddleware = _middlewaresQue.shift(); 31 32 //キューに入れていた関数オブジェクトを全部実行し終えていた場合 33 if (nextMiddleware === undefined){ 34 35 //再登録 36 _middlewaresQue = _middlewares.concat(); 37 38 //キューから次の関数オブジェクトを取り出す 39 nextMiddleware = _middlewaresQue.shift(); 40 41 } 42 43 //キューから取り出した次の関数オブジェクトを実行 44 nextMiddleware(this.request, this.response, this.callNextMiddleware.bind(this)); 45 46 } 47 48} 49 50var app = new App(); 51 52//順々に実行される関数オブジェクトを登録 53app.registerMiddleware(test1); 54app.registerMiddleware(test2); 55 56 57server.start(app);

###server.js

node.js

1var http = require("http"); 2 3var Server = function(){}; 4 5Server.prototype.start = function(app){ 6 7 var server = http.createServer(onRequest).listen(8000); 8 9 function onRequest(request, response) { 10 11 app.request = request; 12 app.response = response; 13 14 //《挙動の確認用》リクエストがあったURLを配列に格納してみる 15 app.urlHistory.push(request.url); //リクエストがあったurlをapp.urlHistory配列に格納 16 console.log(app.urlHistory); 17 18 //最初に登録しておいた関数オブジェクトが順々に呼ばれて処理されていく 19 app.callNextMiddleware(); 20 21 } 22 23} 24 25module.exports = new Server();

###test1.js (ルーティングやエラー処理などになる予定)

node.js

1var test1 = function(request, response, next){ 2 3 console.log("test1"); 4 5 6 next(); //app.callNextMiddlewareが実行される 7 8} 9 10module.exports = test1;

###test2.js(ルーティングやエラー処理などになる予定)

node.js

1var test2 = function(request, response, next){ 2 3 console.log("test2"); 4 5 response.writeHead(200, {"content-Type": "text/html"}); 6 response.write("test2"); 7 response.end(); 8 9 10 11} 12 13module.exports = test2;

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問するにあたって、質問内容を整理して書いていましたら、自分の頭も整理されたようで、何に混乱していたのかを理解することが出来、それにより、自分の疑問も解消されたように思います。

投稿2016/01/25 05:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問