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

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

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

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

Q&A

1回答

3028閲覧

Nodejsのhttp.createServer()について

t_beginer

総合スコア5

Node.js

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

0グッド

0クリップ

投稿2020/01/20 16:19

編集2020/01/20 16:21

下記のコードのコールバック関数の引数(response)はなぜ、それぞれのメソッド(writeHead,write,end)を使用できるのでしょうか?

単なる引数にしか見て取れないのですが。。。
どのような理屈でそれぞれのメソッドが使用できるようになっているのかご教授願いたいです。
(どのタイミングで第二引数のresponseが各メソッドを使えるようになっているのか(いつオブジェクトになっているのか?))

Node.js

1var http = require("http"); 2 3http.createServer(function(request, response) { 4 response.writeHead(200, {"Content-Type": "text/plain"}); 5 response.write("Hello World"); 6 response.end(); 7}).listen(8888); 8 9 10// 下記の呼び出し方の理屈は理解できています。 11function say(word) { 12 console.log(word); 13} 14 15function execute(someFunction, value) { 16 someFunction(value); 17} 18 19execute(say, "Hello"); 20execute(function(word){console.log(word)}, "Hello");

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

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

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

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

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

guest

回答1

0

コールバック関数の引数(response)はなぜ、それぞれのメソッド(writeHead,write,end)を使用できるのでしょうか?

引数(response)に渡されているのが、Class: http.ServerResponseのインスタンスだからです。
ちなみに、第一引数は Class: http.IncomingMessage のインスタンスが渡されています。

サーバーの仕事は、ざっくりと3つのプロセスに分けて考えます。

  1. クライアントからの要求を受け、どのような要求内容かを知る(IncomingMessage の機能)。
  2. ごにょごにょと処理する。 <--- expressKoaJS といったフレームワークが利用される。
  3. 処理結果に応じた実際の応答をする。(http.ServerResponse の機能)。

どのような理屈でそれぞれのメソッドが使用できるようになっているのか

クライアントから要求を受けたサーバーが応答するまでに 2. のプログラム実行がありますが、1. と 3. は Httpプロトコルの詳細を抽象化されたオブジェクトで隠蔽し、APIのごとく利用できるようになっています。

ともにクライアントから要求を受けたときに具象化されているので、(正しい応答内容かどうかを問題としないなら)コールバック関数内ではすぐに利用できます。

投稿2020/01/20 22:02

AkitoshiManabe

総合スコア5432

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問