NodeJS搭建HTTP服务器的实现步骤_node.js_脚本之家

我们使用 url 的 parse
方法来帮我们解析请求路径,在真实的服务器中传入的第一个参数为
req.url,第二个参数不传时,query 会被解析成 a=1&b=2
的形式,第二个参数传入 true,query
属性的查询字符串会被解析成对象的形式。

http 模块是基于 net 模块实现的,所以 net 模块原有的事件在 http
中依然存在。

let str = "a=1&b=2&c=3";let obj = {};str.replace/g, function() { obj[arguments[1]] = arguments[2];});console.log; // { a: '1', b: '2', c: '3' }
const url = require;let str = "http://user:pass@www.pandashen.com:8080/src/index.html?a=1&b=2#hash";// parse 方法帮助我们解析 url 路径let obj = url.parse;console.log;// {// protocol: 'http:',// slashes: true,// auth: 'user:pas',// host: 'www.pandashen.com:8080',// port: '8080',// hostname: 'www.pandashen.com',// hash: '#hash',// search: '?a=1&b=2',// query: '{ a: '1', b: '2' }',// pathname: '/src/index.html'// path: '/src/index.html?a=1&b=2',// href: 'http://user:pass@www.pandashen.com:8080/src/index.html?a=1&b=2#hash' }

我们可以通过 req 来获取请求信息,自然也可以通过 res
来设置响应信息返回给客户端。

通过 req
对应的属性可以拿到请求行和请求首部的信息,请求体内的内容通过流操作来获取,其中
url 中存在多个有用的参数,我们自己处理会很麻烦,可以通过 NodeJS
的核心模块 url 进行解析。

返回给客户端的信息主要分为两部分,分别为响应头和返回给浏览器的内容,在不设置响应头的情况下,默认会设置响应头
Content-Length 和 Date ,代表当前返回给客户端的内容长度和日期。

const http = require;const server = http.createServer();// net 模块事件server.on("connection", function { console.log;server.listen;

1、创建 HTTP 服务器

使用 NodeJS 实现的 “爬虫” 其实就可以通过 http
模块创建的客户端来实现,客户端帮我们向我们要抓取数据的地址发送请求,并拿到响应的数据进行解析。

我们结合 http 模块创建的服务端和客户端实现一个简易版的 “爬虫”
去抓取百度新闻页所有 li 标签内的文章标题。

const http = require;const server = http.createServer();server.on("request", function { // 设置响应头,不能多次调用,见到要认识 res.writeHead(200, { "Content-Type": "text", a: "hello world" }); // 设置响应头,可以多次调用,每次设置一个响应头 res.setHeader("Content-Type", "text"); // 设置状态码,不设置默认为 200 res.statusCode = 200; // 不发送 Date响应头 res.sendDate = false; // 返回内容 res.write; // 不会关闭连接 res.end; // 将内容返回后关闭连接});server.listen { console.log;});

HTTP 客户端

在请求对象 req 中存在请求的方法、请求的 url、当前的 HTTP
协议版本和请求头等信息。

3、设置响应信息

上面的正则匹配中 代表匹配

// 客户端:client.jsconst http = require;// 发送请求的配置let config = { host: "localhost", port: 3000, method: "get", headers: { a: 1 }};// 创建客户端let client = http.request { // 接收服务端返回的数据 let arr = []; res.on("data", function { arr.push; res.on { console.log.toString;// 发送请求client.end();

2、获取请求信息

我们使用自己创建的客户端访问自己的服务端,并体会请求响应的过程,就是用上面
client.js 作为客户端,启动 server.js 后再启动 client.js 查看效果。

前言

在被解析路径返回的对象中有几个属性被经常使用:

// 简易爬虫:crawl.jsconst http = require;// 创建服务器const server = http.createServer();// 监听请求server.on("request", function { let client = http.request( { host: "news.baidu.com", method: "get", port: 80 }, function { // 接收百度新闻返回的数据 let arr = []; r.on("data", function { arr.push; r.on { // 处理数据 let result = Buffer.concat; let matches = result.match/gm); // 设置返回给浏览器的文档类型和编码格式 res.setHeader("Content-Type", "text/html;charset=utf8"); // 响应浏览器 res.end; } ); client.end;server.listen;

总结

返回给浏览器的内容可以通过 res 的 write 方法和 end 方法进行发送,write
方法不会断开连接,end 方法会断开连接,在 end
方法存在参数时,会在内部调用 write 将参数内容返回给客户端,并断开连接。

简易爬虫

在 createServer 的回调和 request 事件的回调函数中有两个参数,req,基于
socket,这两个对象都是 Duplex 类型的可读可写流。

const http = require;const server = http.createServer();server.on("request", function { console.log; // 获取请求方法 console.log; // 获取请求路径 console.log; // 获取 HTTP 协议版本 console.log; // 获取请求头 // 获取请求体的内容 let arr = []; req.on("data", function { arr.push; req.on { console.log.toString;server.listen { console.log;});

在 net 模块中可以通过 net.createConnection
来创建客户端,并发送请求到服务端,在 http 模块同样可以创建客户端,并向
http 服务器发送请求。

HTTP 服务器

在上面代码的 replace
方法的回调函数中参数集合的第一项为匹配到的字符串,第二项为第一个分组的值,第三项为第二个分组的值,依次类推,倒数第二项为分组匹配的索引,最后一项为原字符串。

www.6766.com ,相信在读过本篇文章之后对搭建一个 Node 服务应该已经有了思路,为未来通过
Node 服务实现复杂的业务场景及数据的处理打下了一个基础,希望初学 Node
的小伙伴在看了这篇文章后能有所收获。

const http = require;const server = http.createServer { // ......});server.listen;

const http = require;const server = http.createServer();server.on("request", function { // ......});server.listen;

同时使用 HTTP 客户端和服务器

在 NodeJS 中,创建 HTTP 服务器可以与 net 模块创建 TCP
服务器对比,创建服务器有也两种方式。

上面爬取百度新闻数据的过程中,我们自己的 Node 服务器扮演了一个 “中间层”
的角色,我们通过浏览器访问自己的服务器 localhost:3000 触发 request
事件,执行了回调,在回调中创建客户端向 news.baidu.com
发送了请求,并在客户端的回调中处理了响应,将处理后的内容通过我们自己
Node 服务器的 res 对象返回给了浏览器。

在 http 模块中通过 request
方法创建客户端,该方法第一个参数为发送请求的配置,包含请求地址、端口号、请求方法以及请求头等,第二个参数为回调函数,在请求被响应后执行,回调函数的参数为服务器的响应对象
res,创建的客户端通过 end 方法将请求发出与服务端进行通信。

在 NodeJS 中用来创建服务的模块是 http 核心模块,本篇就来介绍关于使用
http 模块搭建 HTTP 服务器和客户端的方法,以及模块的基本 API。

到 之间所有内容,gm 代表全局并多行匹配。

url 模块中,将查询字符串 a=1&b=2 转换为对象 { a: ‘1’, b: ‘2’ }
的实现方式其实是使用正则替换实现的。

模拟查询字符串转换对象的核心逻辑:

host:主机; hostname:主机名; query:请求参数; pathname:资源路径。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

// 服务器:server.jsconst http = require;http.createServer { console.log; // 获取客户端请求信息 console.log; console.log; // 返回数据 res.write.listen { console.log;});

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图