ホームページ > ウェブフロントエンド > フロントエンドQ&A > Nodejs httpモジュールのメソッドとは何ですか

Nodejs httpモジュールのメソッドとは何ですか

青灯夜游
リリース: 2022-01-25 13:57:21
オリジナル
2198 人が閲覧しました

nodejs http モジュールのメソッドは次のとおりです: 1. createServer() (サーバー インスタンスを作成できます); 2. listen() (指定されたポートをリッスンするためにサーバーを起動します); 3. setHeader() ; 4. write(); 5. end(); 6. get(); 7. request() など。

Nodejs httpモジュールのメソッドとは何ですか

#このチュートリアルの動作環境: Windows7 システム、nodejs バージョン 12.19.0、DELL G3 コンピューター。

http モジュール

1 基本的な使用法

1.1 モジュールのプロパティ

1.1 .1 HTTP リクエストの属性

  • headers: HTTP リクエストのヘッダー。

  • #url: 要求されたパス。

1.2 モジュール メソッド

1.2.1 http モジュール メソッド

createServer(callback) :サーバーインスタンスを作成します。

1.2.2 サーバー インスタンス メソッド

listen(port): サーバーを起動して、指定されたポートをリッスンします。

1.2.3 HTTPレスポンスメソッド

  • setHeader(key, value): HTTPヘッダ情報を指定します。

  • write(str): HTTP レスポンスの内容を指定します。

  • end(): HTTP レスポンスを送信します。

1.3 GET リクエストの処理

Http モジュールは主に HTTP サービスを構築するために使用されます。 Node.js を使用して HTTP サーバーを構築するのは非常に簡単です。

var http = require('http');

http.createServer(function (request, response){
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8080, "127.0.0.1");

console.log('Server running on port 8080.');
ログイン後にコピー

    上記のコードの最初の行
  • var http = require("http") は、http モジュールをロードすることを意味します
  • 次に、http モジュールを呼び出します
  • createServer メソッド、サーバー インスタンスを作成し、それを変数 http に割り当てます。
  • ceateServer メソッドは関数をパラメータとして受け入れます。関数の request パラメータは、クライアントの HTTP リクエストを表すオブジェクトです。
  • 応答パラメータも、サーバー側の HTTP 応答を表すオブジェクトです。
  • response.writeHead メソッドは、サーバーが HTTP ヘッダーで応答することを示し、response.end メソッドはサーバーの応答の特定の内容を示し、応答後に会話を閉じます。
  • 最後の
  • listen(8080) は、サーバー インスタンスを起動し、ローカル マシンの 8080 ポートをリッスンすることを意味します上記のコード行をファイル app.js に保存し、node を使用してこのファイルを呼び出すと、サーバーが実行を開始します。
  • $ node app.js
    ログイン後にコピー
この時点で、コマンド ライン ウィンドウに

「ポート 8080 で実行されているサーバー。」というプロンプトが 1 行表示されます。ブラウザを開いて http://localhost:8080 にアクセスすると、Web ページに "Hello world!" が表示されます。 上記はその場でWebページを生成する例ですが、あらかじめWebページを書いてファイルに保存し、fsモジュールでWebページのファイルを読み込んで返すこともできます。

var http = require('http');
var fs = require('fs');

http.createServer(function (request, response){
  fs.readFile('data.txt', function readData(err, data) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end(data);
  });
}).listen(8080, "127.0.0.1");

console.log('Server running on port 8080.');
ログイン後にコピー

以下の修正は、異なる URL からのリクエストに応じて異なるコンテンツを表示するもので、Web サイトのプロトタイプを作成することに相当します。

var http = require("http");
http.createServer(function(req, res) {
  // 主页
  if (req.url == "/") {
    res.writeHead(200, { "Content-Type": "text/html" });
    res.end("Welcome to the homepage!");
  }
	// About页面
  else if (req.url == "/about") {
    res.writeHead(200, { "Content-Type": "text/html" });
    res.end("Welcome to the about page!");
  }
  // 404错误
  else {
    res.writeHead(404, { "Content-Type": "text/plain" });
    res.end("404 error! File not found.");
  }
}).listen(8080, "localhost");
ログイン後にコピー

コールバック関数のreq(リクエスト)オブジェクトは以下の属性を持ちます。

    url
  • : リクエストの URL
  • method
  • : HTTP リクエスト メソッド
  • headers# #注※:HTTPリクエストのすべてのHTTPヘッダ情報です。
  • 1.4 POST リクエストの処理

クライアントが POST

メソッドを使用してデータを送信すると、サーバーは

data を処理できます。 end の 2 つのイベントで、リスニング関数をセットアップします。

var http = require('http');

http.createServer(function (req, res) {
  var content = "";

  req.on('data', function (chunk) {
    content += chunk;
  });

  req.on('end', function () {
    res.writeHead(200, {"Content-Type": "text/plain"});
    res.write("You've sent: " + content);
    res.end();
  });

}).listen(8080);
ログイン後にコピー
data

データ受信処理中にデータを受信するたびにイベントがトリガーされ、受信したデータがコールバック関数に渡されます。

end イベントは、すべてのデータの受信が完了した後にトリガーされます。 上記のコードを少し変更することで、ファイルのアップロード関数を作成できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">&quot;use strict&quot;; var http = require(&amp;#39;http&amp;#39;); var fs = require(&amp;#39;fs&amp;#39;); var destinationFile, fileSize, uploadedBytes; http.createServer(function (request, response) { response.writeHead(200); destinationFile = fs.createWriteStream(&quot;destination.md&quot;); request.pipe(destinationFile); fileSize = request.headers[&amp;#39;content-length&amp;#39;]; uploadedBytes = 0; request.on(&amp;#39;data&amp;#39;, function (d) { uploadedBytes += d.length; var p = (uploadedBytes / fileSize) * 100; response.write(&quot;Uploading &quot; + parseInt(p, 0) + &quot; %\n&quot;); }); request.on(&amp;#39;end&amp;#39;, function () { response.end(&quot;File Upload Complete&quot;); }); }).listen(3030, function () { console.log(&quot;server started&quot;); });</pre><div class="contentsignin">ログイン後にコピー</div></div>
#2 リクエストを行う

#2.1 get()

##get メソッド

get リクエストを発行するために使用されます。

function getTestPersonaLoginCredentials(callback) {
  return http.get({
    host: &#39;personatestuser.org&#39;,
    path: &#39;/email&#39;
  }, function(response) {
    var body = &#39;&#39;;

    response.on(&#39;data&#39;, function(d) {
      body += d;
    });

    response.on(&#39;end&#39;, function() {
      var parsed = JSON.parse(body);
      callback({
        email: parsed.email,
        password: parsed.pass
      });
    });
  });
},
ログイン後にコピー

2.2 request()

request メソッドは、HTTP リクエスト
の発行に使用され、その使用形式は次のように。

http.request(options[, callback])
ログイン後にコピー

リクエスト メソッドのオプション パラメータには、オブジェクトまたは文字列を指定できます。これが文字列の場合は、これが URL であることを意味し、Node は内部で url.parse() を自動的に呼び出してこのパラメータを処理します。 オプション オブジェクト

は次のプロパティを設定できます

  • host:HTTP请求所发往的域名或者IP地址,默认是localhost
  • hostname:该属性会被url.parse()解析,优先级高于host。
  • port:远程服务器的端口,默认是80。
  • localAddress:本地网络接口。
  • socketPath:Unix网络套接字,格式为host:port或者socketPath。
  • method:指定HTTP请求的方法,格式为字符串,默认为GET。
  • path:指定HTTP请求的路径,默认为根路径(/)。可以在这个属性里面,指定查询字符串,比如/index.html?page=12。如果这个属性里面包含非法字符(比如空格),就会抛出一个错误。
  • headers:一个对象,包含了HTTP请求的头信息。
  • auth:一个代表HTTP基本认证的字符串user:password。
  • agent:控制缓存行为,如果HTTP请求使用了agent,则HTTP请求默认为Connection: keep-alive,它的可能值如下:
    • undefined(默认):对当前host和port,使用全局Agent。
    • Agent:一个对象,会传入agent属性。
    • false:不缓存连接,默认HTTP请求为Connection: close。
  • keepAlive:一个布尔值,表示是否保留socket供未来其他请求使用,默认等于false。
  • keepAliveMsecs:一个整数,当使用KeepAlive的时候,设置多久发送一个TCP KeepAlive包,使得连接不要被关闭。默认等于1000,只有keepAlive设为true的时候,该设置才有意义。
    request方法的callback参数是可选的,在response事件发生时触发,而且只触发一次。
    http.request()返回一个http.ClientRequest类的实例。它是一个可写数据流,如果你想通过POST方法发送一个文件,可以将文件写入这个ClientRequest对象
    下面是发送POST请求的一个例子。
var postData = querystring.stringify({
  &#39;msg&#39; : &#39;Hello World!&#39;
});

var options = {
  hostname: &#39;www.google.com&#39;,
  port: 80,
  path: &#39;/upload&#39;,
  method: &#39;POST&#39;,
  headers: {
    &#39;Content-Type&#39;: &#39;application/x-www-form-urlencoded&#39;,
    &#39;Content-Length&#39;: postData.length
  }
};

var req = http.request(options, function(res) {
  console.log(&#39;STATUS: &#39; + res.statusCode);
  console.log(&#39;HEADERS: &#39; + JSON.stringify(res.headers));
  res.setEncoding(&#39;utf8&#39;);
  res.on(&#39;data&#39;, function (chunk) {
    console.log(&#39;BODY: &#39; + chunk);
  });
});

req.on(&#39;error&#39;, function(e) {
  console.log(&#39;problem with request: &#39; + e.message);
});

// write data to request body
req.write(postData);
req.end();
ログイン後にコピー

注意,上面代码中,req.end()必须被调用,即使没有在请求体内写入任何数据,也必须调用。因为这表示已经完成HTTP请求
发送过程的任何错误(DNS错误、TCP错误、HTTP解析错误),都会在request对象上触发error事件

3 搭建HTTPs服务器

搭建HTTPs服务器需要有SSL证书。对于向公众提供服务的网站,SSL证书需要向证书颁发机构购买;对于自用的网站,可以自制。
自制SSL证书需要OpenSSL,具体命令如下。

openssl genrsa -out key.pem
openssl req -new -key key.pem -out csr.pem
openssl x509 -req -days 9999 -in csr.pem -signkey key.pem -out cert.pem
rm csr.pem
ログイン後にコピー

上面的命令生成两个文件:ert.pem(证书文件)key.pem(私钥文件)。有了这两个文件,就可以运行HTTPs服务器了。
Node.js提供一个https模块,专门用于处理加密访问。

var https = require(&#39;https&#39;);
var fs = require(&#39;fs&#39;);
var options = {
  key: fs.readFileSync(&#39;key.pem&#39;),
  cert: fs.readFileSync(&#39;cert.pem&#39;)
};

var a = https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);
ログイン後にコピー

上面代码显示,HTTPs服务器与HTTP服务器的最大区别,就是createServer方法多了一个options参数。运行以后,就可以测试是否能够正常访问。

curl -k https://localhost:8000
ログイン後にコピー

更多node相关知识,请访问:nodejs 教程

以上がNodejs httpモジュールのメソッドとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート