node.js入门 - 9.api:http

简介:   node一个重要任务是用来创建web服务,接下来我们就学习与此相关的一个重要的api -- http。我们使用http.createServer()创建一个http服务的实例,用来处理来自客户的请求。

  node一个重要任务是用来创建web服务,接下来我们就学习与此相关的一个重要的api -- http。我们使用http.createServer()创建一个http服务的实例,用来处理来自客户的请求。http模块包含一些重要的内容,下面我们就来学习。

  

  http服务器

  我们先来看一个简单的例子,如何创建一个简单的服务器。

require('http').createServer(function(req,res){
  res.writeHead(200, {});   res.end('hello world');}
).listen(8125);

  上面的代码比较简单,使用require('http')创建了一个http的实例,然后使用createServer方法创建了一个服务器,使用listen监听8125端口。上面的代码使用了链式的编码风格,虽然简单但是可读性差,变量复用性也不好,所以我们建议使用下面的编码风格。

var http = require('http');
var server = http.createServer();
var handleReq = function(req,res){
  res.writeHead(200, {});
  res.end('hello world');
};
server.on('request', handleReq);
server.listen(8125);

  现在的代码就明了多了,通过 var server = http.createServer() 创建了服务器,并把它保存在变量server中,接下来使用server.on('request', handleReq)绑定request事件。对request事件的绑定,例1链式风格的编码并没能直接体现出来。

  http提供了很多其他的事件,下面我们简单介绍。

  1.connection和close:分别代表建立和关闭与客户端的tcp连接。

  2.checkContinue:当客户端向服务器端发送大量数据的时候,他将检查是否可以继续,此时触发事件。当触发了checkContinue事件时,request事件不再触发。

  3.upgrade:当客户端请求升级协议的时候触发,如果该事件没有相应的处理,服务器将拒绝升级。

  4.clientError:客户端发生异常时触发。

 

  http客户端

  有时候你需要使用到向外连接的http请求,例如使用web服务,访问文本数据源或者抓取web站点信息,这时你可以使用http.ClientRequest创建http请求。先看一个例子:

var http = require('http');
var opts = {
  host: 'www.google.com'
  port: 80,
  path: '/',
  method: 'GET'
};
var req = http.request(opts, function(res) {
  console.log(res);
  res.on('data', function(data) {
    console.log(data);
  });
});
req.end();

  我们创建了一个http请求,为响应添加了data事件,最后使用req.end()初始化和发送我们的请求。

  

  创建http GET 请求

var http = require('http');
var opts = {
  host: 'www.google.com'
  port: 80,
  path: '/',
};
var req = http.get(opts, function(res) {
  console.log(res);
  res.on('data', function(data) {
    console.log(data);
  });
});

  这个例子和之前的例子实现同样的功能,区别就在于opts对象少了method属性,使用http.get()代替了之前的var req=http.request()和req.end()。由于返回回来的数据是2进制数据,我们需要使用response.setEncoding()实现编码,所以我们需要对代码做点小修改。

var http = require('http');
var opts = {
  host: 'www.google.com'
  port: 80,
  path: '/',
};
var req = http.get(opts, function(res) {
  console.log(res);
  res.setEncoding('utf8');   res.on(
'data', function(data) {     console.log(data);   }); });

 

  使用http POST和PUT发送数据

var options = {
  host: 'www.example.com',
  port: 80,
  path: '/submit',
  method: 'POST'
};
var req = http.request(options, function(res) {
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});
req.write("my data");
req.write("more of my data");
req.end();

  上面的例子我们使用了req.write()方法,向服务器说明我们要发送的数据,最后使用req.end()初始化并发送请求。代码中的res是ClientResponse对象,他有两个重要的属性:statusCode(状态码)和header(响应头)。

 

  URL

  url模块提供了一些方法,让我们解析和处理url字符串变得更加简单,这些方法包括:parse, format和resolve。我们来看例子,逐行在node REPL中执行下面的命令(之前的课程讲到了如何使用,node.js入门 - 8.api:events)。

var URL = require('url');
var myUrl = "http://www.nodejs.org/some/url/?with=query&param=that&are=awesome#alsoahash";
myUrl
parsedUrl = URL.parse(myUrl);
parsedUrl = URL.parse(myUrl, true);

  执行结果:

 

   querystring

  querystring模块式用来处理querystring字符串的,他包括如下方法:parse, decode, escape, unescape, unescapeBuffer, encode和stringify。我们来看一个例子。

var qs = require('querystring');
qs.parse('a=1&b=2&c=d');

  执行结果:

   再来一例,关于encode方法。

var qs = require('querystring');
var myObj = {'a':1, 'b':5, 'c':'cats', 'func': function(){console.log('dogs')}}
qs.encode(myObj);

  执行结果:

目录
相关文章
|
5月前
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
163 7
|
4月前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
3月前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
77 12
|
4月前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
4月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
4月前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
|
4月前
|
JavaScript 中间件 API
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
111 4
|
4月前
|
JavaScript 前端开发 NoSQL
深入浅出:使用Node.js构建RESTful API
【10月更文挑战第35天】在数字时代的浪潮中,后端技术如同海洋中稳固的灯塔,为前端应用提供数据和逻辑支撑。本文旨在通过浅显易懂的方式,带领读者了解如何利用Node.js这一强大的后端平台,搭建一个高效、可靠的RESTful API。我们将从基础概念入手,逐步深入到代码实践,最终实现一个简单的API示例。这不仅是对技术的探索,也是对知识传递方式的一次创新尝试。让我们一起启航,探索Node.js的奥秘,解锁后端开发的无限可能。
|
5月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
57 0
|
5月前
|
JSON JavaScript API
Node.js RESTful API
10月更文挑战第8天
30 0