我的编程空间,编程开发者的网络收藏夹
学习永远不晚

nodejs的http模块方法怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

nodejs的http模块方法怎么使用

这篇文章主要讲解了“nodejs的http模块方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs的http模块方法怎么使用”吧!

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

感谢各位的阅读,以上就是“nodejs的http模块方法怎么使用”的内容了,经过本文的学习后,相信大家对nodejs的http模块方法怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

nodejs的http模块方法怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Nodejs中的http模块怎么使用

这篇文章主要介绍了Nodejs中的http模块怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nodejs中的http模块怎么使用文章都会有所收获,下面我们一起来看看吧。一、http 模块http 模块是
2023-07-04

nodejs中的http模块与npm模块使用

这篇文章主要介绍了nodejs中的http模块与npm模块使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

Nodejs的fs模块怎么使用

本文小编为大家详细介绍“Nodejs的fs模块怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Nodejs的fs模块怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Nodejs 中的 fs 模块的使
2023-06-29

Angular中http请求模块的使用方法

这篇文章主要介绍了Angular中http请求模块的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先模块引入import { BrowserModule } fro
2023-06-06

nodejs模块怎么用

Node.js 是一套基于事件驱动、异步 I/O 的开源跨平台 JavaScript 运行时环境。在 Node.js 中,使用模块来组织代码,每个模块都是一个独立的文件,可以通过导入/导出进行模块间调用和逻辑复用。本文将介绍 Node.js 模块的基本用法。## 1.导入模块在 Node.js 中,使用 require() 函数导入模块。require() 函数的参数为需要导入
2023-05-18

Node http模块基本使用方法是什么

这篇文章主要介绍了Node http模块基本使用方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Node http模块基本使用方法是什么文章都会有所收获,下面我们一起来看看吧。http 模块使用 Nod
2023-07-05

Nodejs中内置模块怎么使用

小编给大家分享一下Nodejs中内置模块怎么使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!内置模块的基本使用// 01. 导包const fs = requi
2023-06-14

怎么在Node.js中使用http模块

这篇文章将为大家详细讲解有关怎么在Node.js中使用http模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。HTTP协议要理解Web服务器程序的工作原理,首先,我们要对HTTP协议有基本
2023-06-14

深入学习nodejs中的async模块的使用方法

最近在学习nodejs,这两天学习了async模块这个地方知识点挺多的,所以,今天添加一点小笔记。 async模块是为了解决嵌套金字塔,和异步流程控制而生.常用的方法介绍npm 安装好async模块,然后引入就可以使用 var async
2022-06-04

Node.js中path模块,url模块,http模块怎么用

小编给大家分享一下Node.js中path模块,url模块,http模块怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!path模块Node.js中,提供了一
2023-06-29

ASP.NET的HTTP模块和处理程序之HTTP模块怎么用

这篇文章给大家分享的是有关ASP.NET的HTTP模块和处理程序之HTTP模块怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在配置文件中注册HTTP模块当我们建立了HTTP模块并把它复制到Web应用程序的b
2023-06-17

Pytho的HTTP交互httpx包模块怎么使用

本篇内容介绍了“Pytho的HTTP交互httpx包模块怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 的 httpx
2023-06-29

编程热搜

目录