首頁  >  文章  >  web前端  >  nodejs http模組的方法有哪些

nodejs http模組的方法有哪些

青灯夜游
青灯夜游原創
2022-01-25 13:54:042098瀏覽

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請求
  • response參數也是一個對象,表示伺服器端的HTTP回應。 response.writeHead方法表示,伺服器端回應一個HTTP頭訊息;response.end方法表示,伺服器端回應的具體內容,以及回應完成後關閉本次對話
  • 最後的listen(8080)表示啟動伺服器實例,監聽本機的8080連接埠
    將上面這幾行程式碼儲存成文件app.js,然後用node呼叫這個文件,伺服器就開始運作了。
$ node app.js

這時命令列視窗將顯示一行提示「Server running at port 8080.」。開啟瀏覽器,造訪http://localhost:8080,網頁顯示「Hello world!」
上面的範例是當場產生網頁,也可以事前寫好網頁,存在檔案中,然後利用fs模組讀取網頁文件,將其回傳。

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(request)對象,擁有下列屬性。

  • url:發出請求的網址
  • #method:HTTP請求的方法
  • headers:HTTP請求的所有HTTP頭資訊。

1.4 處理POST請求

當客戶端採用POST方法傳送資料時,伺服器端可以對dataend兩個事件,設立監聽函數。

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事件則是在所有資料接收完成後觸發。
對上面程式碼稍加修改,就可以做出文件上傳的功能。

"use strict";

var http = require('http');
var fs = require('fs');
var destinationFile, fileSize, uploadedBytes;

http.createServer(function (request, response) {
  response.writeHead(200);
  destinationFile = fs.createWriteStream("destination.md");
  request.pipe(destinationFile);
  fileSize = request.headers['content-length'];
  uploadedBytes = 0;

  request.on('data', function (d) {
    uploadedBytes += d.length;
    var p = (uploadedBytes / fileSize) * 100;
    response.write("Uploading " + parseInt(p, 0) + " %\n");
  });

  request.on('end', function () {
    response.end("File Upload Complete");
  });
}).listen(3030, function () {
  console.log("server started");
});

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
      });
    });
  });
},

2.2 request()

#request方法用於發出HTTP請求,它的使用格式如下。

http.request(options[, callback])

request方法的options參數,可以是一個對象,也可以是一個字串。如果是字串,就表示這是一個URL,Node內部就會自動呼叫

url.parse(),處理這個參數。
options物件可以設定如下屬性

  • 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({
  '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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn