#このチュートリアルの動作環境: Windows7 システム、nodejs バージョン 12.19.0、DELL G3 コンピューター。 http モジュールnodejs http モジュールのメソッドは次のとおりです: 1. createServer() (サーバー インスタンスを作成できます); 2. listen() (指定されたポートをリッスンするためにサーバーを起動します); 3. setHeader() ; 4. write(); 5. end(); 6. get(); 7. request() など。
1 基本的な使用法
1.1 モジュールのプロパティ
1.1 .1 HTTP リクエストの属性headers: HTTP リクエストのヘッダー。
#url: 要求されたパス。
1.2 モジュール メソッド
1.2.1 http モジュール メソッドcreateServer(callback) :サーバーインスタンスを作成します。
listen(port): サーバーを起動して、指定されたポートをリッスンします。
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.');
は、http モジュールをロードすることを意味します
、サーバー インスタンスを作成し、それを変数 http に割り当てます。
は関数をパラメータとして受け入れます。関数の
request パラメータは、クライアントの HTTP リクエストを表すオブジェクトです。
は、サーバーが HTTP ヘッダーで応答することを示し、
response.end メソッドはサーバーの応答の特定の内容を示し、
応答後に会話を閉じます。
は、サーバー インスタンスを起動し、ローカル マシンの
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.');
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(リクエスト)オブジェクトは以下の属性を持ちます。
クライアントが 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;">"use strict";
var http = require(&#39;http&#39;);
var fs = require(&#39;fs&#39;);
var destinationFile, fileSize, uploadedBytes;
http.createServer(function (request, response) {
response.writeHead(200);
destinationFile = fs.createWriteStream("destination.md");
request.pipe(destinationFile);
fileSize = request.headers[&#39;content-length&#39;];
uploadedBytes = 0;
request.on(&#39;data&#39;, function (d) {
uploadedBytes += d.length;
var p = (uploadedBytes / fileSize) * 100;
response.write("Uploading " + parseInt(p, 0) + " %\n");
});
request.on(&#39;end&#39;, function () {
response.end("File Upload Complete");
});
}).listen(3030, function () {
console.log("server started");
});</pre><div class="contentsignin">ログイン後にコピー</div></div>
#2 リクエストを行う
#2.1 get()
##get メソッドget リクエストを発行するために使用されます。 function getTestPersonaLoginCredentials(callback) {
return http.get({
host: 'personatestuser.org',
path: '/email'
}, function(response) {
var body = '';
response.on('data', function(d) {
body += d;
});
response.on('end', function() {
var parsed = JSON.parse(body);
callback({
email: parsed.email,
password: parsed.pass
});
});
});
},
request メソッドは、HTTP リクエスト
の発行に使用され、その使用形式は次のように。
http.request(options[, callback])
リクエスト メソッドのオプション パラメータには、オブジェクトまたは文字列を指定できます。これが文字列の場合は、これが URL であることを意味し、Node は内部で url.parse()
を自動的に呼び出してこのパラメータを処理します。 オプション オブジェクト
host
:HTTP请求所发往的域名或者IP地址,默认是localhosthostname
:该属性会被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对象
。var postData = querystring.stringify({ 'msg' : 'Hello World!' }); var options = { hostname: 'www.google.com', port: 80, path: '/upload', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': postData.length } }; var req = http.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); req.on('error', function(e) { console.log('problem with request: ' + 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('https'); var fs = require('fs'); var options = { key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem') }; 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 サイトの他の関連記事を参照してください。