HTTP Nodejsモジュールコアモジュールは、インストールせずに直接使用することができています。中国の文書アドレスは次のとおりです。http://nodejs.cn/api/http.html
1.基本的な使用
まず、プロジェクトディレクトリに新しいファイルを作成するserver.js
ことで、次の書き込み:
// 引入核心模块
const http = require('http');
// 创建服务器
const sev = http.createServer();
// 为服务器绑定request事件 表示当用户的请求发送到的时候触发
// 回调函数的参数说明:
// 参数1:发起请求的客户端的信息
// 参数2:服务端处理响应的相关参数和方法
sev.on('request', function (request, response) {
console.log(request);
console.log(response);
// 设置响应编码,防止乱码的出现
response.setHeader('Content-Type', 'text/html;charset=utf-8');
// 结束响应
response.end('你好啊!');
});
// 设置服务器监听的端口
sev.listen('80', '127.0.0.1', function(){
});
次に、コマンドラインを実行します。
node ./server.js
エラーがない場合、それは私たちが書く問題を欠い示し、この時間は、私たちがお使いのブラウザでアクセスすることができます。http://127.0.0.1:80
効果を確認します。
はじめに1. http.Serverクラス
私たちは、以前のコードを使用しconst s = http.createServer();
ている戻り値を取得するにはhttp.Server
、クラス、ここでは、クラスの一般的なプロパティとメソッドのどのようないくつかのです。
http.server
HTTPサーバーベースのイベントであり、すべての要求は、別の事件にカプセル化されている、我々は彼があなたがHTTPサーバのすべての機能を実現することができ、対応するイベントを書くの数行を必要とします
1.1一般的なイベント
request
イベント
クライアント要求が入ってくると、イベントは、2つのパラメータをトリガさrequest
とresponse
、それぞれ、http.IncomingMessage
およびhttp.ServerResponse
、それぞれ、情報の要求と応答の例。connection
イベント
TCP接続が確立されると、イベントがトリガされ、パラメータソケットを提供する、net.socket(基礎となるプロトコルオブジェクト)のインスタンスclose
イベント
のトリガ時にサーバーがクローズされます
もちろんのは、彼がまだ他のイベントをたくさん持っている、最も一般的に使用されているrequest
イベントは、そのような私たちの目の前のように、書き込み:
const s = http.createServer();
s.on('request', function (request, response) {
});
http.Server
中国のドキュメントします。http://nodejs.cn/api/http.html#http_class_http_server
はじめに2. http.IncomingMessageクラス
http.IncomingMessage
HTTP記録の例要求メッセージは、クライアントに送信され、情報サービスの一部のクライアント側は、サーバは、典型的には、ここでフロントエンドから送信されたデータを取得します。
2.1一般的なプロパティ
名前 | 意味 |
---|---|
コンプリート | クライアントの要求は完全に送信されました |
httpVersion(共通) | HTTPプロトコルのバージョン、通常は1.0または1.1 |
方法(一般的に使用されます) | GET、POST次のようなHTTPリクエストの方法は、 |
URL(共通) | オリジナルリクエストパス |
ヘッダ(共通) | HTTPリクエスト・ヘッダー |
接続 | 現在のHTTP接続ソケットは、net.Socketの一例です |
ソケット | エイリアス接続プロパティ |
クライアント | エイリアスクライアントプロパティ |
console.log(request.url);
console.log(request.headers);
console.log(request.method);
console.log(request.httpVersion);
3. http.ServerResponse类
http.ServerResponse
例は、サーバからクライアントへの応答データに意図されています。
3.1共通のプロパティとメソッド
-
write(chunk[, encoding][, callback])
データ送信要求ブロック体は、この方法は、断片に応答して連続体を提供するために複数回呼び出すことができresponse.write('我好帅啊!哈哈哈'); response.write('我真滴帅!哈哈哈');
-
end([data[, encoding]][, callback])
すべての応答が送信されたことを示すサーバにこの方法信号、およびヘッド本体は、これは、メッセージサーバが完了したと考えるべきです。これは、各応答で呼び出されなければならないresponse.end()
方法。この方法はまた、直接バイナリデータを送信することができます。 -
setHeader(name, value)
レスポンスヘッダが既に存在する場合、ヘッダ情報セットは、値が上書きされます。複数のヘッド、文字列の配列に応じて、同じ名前を送信します。 -
**
statusCode
**プロパティの
設定応答ステータスコード。response.statusCode = 404;
-
writeHead(statusCode[, statusMessage][, headers])
通常、高い位置の呼び出しで、レスポンスヘッダを設定し、
response.setHeader()
レスポンスヘッダと設定されますresponse.writeHead()
合併のレスポンスヘッダ、およびresponse.writeHead()
優先中国の文書アドレス
中国の文書アドレス:のhttp://nodejs.cn/api/http.html#をhttp_class_http_serverresponse
4.書き込み静的ページ処理サーバ
// 引入核心模块
const http = require('http');
const fs = require('fs');
const path = require('path');
// 创建服务器
const sev = http.createServer();
sev.on('request', function (request, response) {
// 获取用户要请求的文件路径
let filePath = __dirname+request.url;
let ext = path.extname(filePath);
// 处理文件的响应数据类型
if(ext == '.html'){
response.setHeader('Content-Type', 'text/html;charset=utf-8');
}else if(ext == '.css'){
response.setHeader('Content-Type', 'text/css;charset=utf-8');
}
// 读取文件
fs.readFile(filePath, function (err, data) {
if (!err) {
// 结束响应并将数据响应给客服端
response.end(data);
}else{
response.end('您访问的文件不存在');
}
})
});
// 设置服务器监听的端口
sev.listen('80', '127.0.0.1', function () {
console.log('服务器已启动');
});
5. HTTP POSTリクエストの処理モジュール
//首先引入各个模块
const http = require('http');
//文件操作模块
const fs = require('fs');
//
const path = require('path');
//
const url = require('url');
// 创建服务器
const sev = http.createServer();
sev.on('request', function (request, response) {
let filePath = __dirname + request.url;
if (request.method == 'POST') {
var us = url.parse(request.url);
if(us.path = '/123'){
// 当请求的数据到达的时候,在这里接收数据
request.on('data', function(chunk){
console.log(chunk.toString());
// 上传文件的话,可以根据request.headers['content-type']的值进行判断来决定后续如何处理
})
}
response.end();
} else {
// 处理post以外的请求
let ext = path.extname(filePath);
if (ext == '.html') {
response.setHeader('Content-Type', 'text/html;charset=utf-8');
} else if (ext == '.css') {
response.setHeader('Content-Type', 'text/css;charset=utf-8');
}
// 读取文件
fs.readFile(filePath, function (err, data) {
if (!err) {
// 结束响应并将数据响应给客服端
response.end(data);
} else {
response.setHeader('Content-Type', 'text/html;charset=utf-8');
response.end('您访问的文件不存在');
}
})
}
});
// 设置服务器监听的端口
sev.listen('80', '127.0.0.1', function () {
console.log("您的服务器已启动");
});