Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《Node.js权威指南》:获取客户端请求信息

《Node.js权威指南》:获取客户端请求信息

作者头像
前端_AWhile
发布于 2022-05-10 08:50:14
发布于 2022-05-10 08:50:14
7.2K00
代码可运行
举报
文章被收录于专栏:前端一会前端一会
运行总次数:0
代码可运行

上一篇《《Node.js权威指南》:如何创建HTTP服务器》中概括的介绍了创建HTTP服务器的套路,包括创建http服务器对象,用服务器对象监听客户端连接事件、错误事件和服务器关闭事件等,整体示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const http = require( "http" );
const event = require( "events" );

class myEmitter extends event.EventEmitter{};
let emitter = new myEmitter();

// 调用http模块的createServer()方法,传入回调函数,方法返回创建的HTTP服务器对象
let app = http.createServer( function ( req, res ) {
    // req 客户端请求对象
    // res 服务器端响应对象
    res.writeHead( 200, { "Content-type": "text/html" } );
    res.write( "<head><meta charset='utf8'></head>" );
    res.end("你好nitx");
} )

// 服务器监听 error 事件
app.on( "error", function ( e ) {
    if( e.code === "EADDRINUSE" ){
        console.log( "地址及商品被占用。" );
    }
} )

// 服务器对象监听 客户端连接 事件
app.on( "connection", function ( socket ) {
    console.log( "客户端连接已建立。" );
} )

// 服务器对象监听 服务器关闭 事件
app.on( "close", function () {
    console.log( "服务器已关闭。" );
} )

// 主动设置定时器 2秒后 触发 服务器对象的close()方法关闭服务器
setTimeout( function () {
    emitter.emit( app.close() );
}, 2000 )

// 服务器对象监听 1338 商品,host和backlog参数默认
app.listen( 1338, ()=>{ console.log( "service is running at port 1338." ); } );

在上例中回顾下nodejs中的事件监听,nodejs用于实现各种事件处理的events模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个继承了EventEmitter类的子类的实例对象。

获取客户端请求信息

HTTP服务器接收到客户端请求时调用的回调函数中的第一个参数值是一个http.IncomingMessage对象,该对象用于读取客户端请求流中的数据。当从客户端请求流中读取到新数据时触发data事件,当读取完客户端请求流中的数据时触发end事件。当该对象被用于读取客户端请求流中的数据时,该对象拥有如下属性:

  • method:该属性值是一个字符串,字符串值为客户端向服务器端发送请求时使用的方法,如GETPOSTPUTDELETE等。
  • url:该属性值是客户端发送请求时使用的url参数字符串,例如//abc/1post/new?param=value等。这个属性非常重要,通常用来判断客户端请求的页面和需要执行的处理。
  • headers:该属性值是客户端发送的请求头对象,存放客户端发送的所有请求头信息,包括cookie信息和浏览器的各种信息。
  • socket:该属性值是服务器端用于监听客户端请求的socket对象。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const http = require( "http" );

let app = http.createServer( function ( req, res ) {
    console.log( `客户端请求方法为:${req.method}` );
    console.log( `客户端请求所用url字符串为:${req.url}` );
    console.log( `客户端请求头对象为:${req.headers}` );
    console.log( `客户端请求所用HTTP版本为:${req.httpVersion}` );
    console.log( `客户端请求的socket对象为:${req.socket}` );
    res.writeHead( 200, { "Content-type": "text/html" } );
    res.write( "<head><meta charset='utf8'></head>" );
    res.end( "大家好,我是nitx" );
} )

app.listen( 1339, ()=>{ console.log( "service is running at port 1339." ); } )

当客户端请求用http://localhost:1339/abc?param=value这个url请求时,上例的打印结果为:

前面说了当HTTP服务器对象createServer()方法中回调函数第一个参数http.IncomingMessage对象从客户端请求数据流读到新数据时会触发data事件,读完数据时会触发end事件,下面就来个示例看下这两个事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// app.js
const http = require( "http" );

let app = http.createServer( function ( req, res ) {
    if( req.url !== "/favicon.ico" ){
        req.on( "data", function ( data ) {
            console.log( "服务器端接收的数据为:" + decodeURIComponent( data ) );
        } )
        req.on( "end", function () {
            console.log( "客户端请求的数据已全部接收完毕。" );
        } )
    }
    res.end();
} )

app.listen( 1335, "127.0.0.1", ()=>{ console.log( "service is running at port 1335." ); } )


// index.html
<body>
    <form action="http://127.0.0.1:1335" method="POST">
        <input type="text" name="name">
        <input type="number" name="age">
        <input type="submit" value="提交">
    </form>
</body>

index.html中进行表单数据提交后,app.js控制台打印结果为:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《Node.js权威指南》:如何创建HTTP服务器
在nodejs中可以很方便的创建服务器。nodejs提供了http模块和https模块,分别用于创建http服务器与http客户端、https服务器和https客户端。
前端_AWhile
2019/08/29
2.2K0
《Node.js权威指南》:HTTP服务器发送响应流
Nodejs里http模块的createServer()方法的回调函数的第二个参数是一个http.ServerResponse对象,可以利用这个对象来发送服务器端的响应数据。
前端_AWhile
2019/08/29
1.8K0
HTTP请求与响应处理
客户端向服务器端发送请求时,有时需要携带一些客户信息,客户信息需要通过请求参数的形式传递到服务器端,比如登录操作。
Qwe7
2022/04/22
9160
HTTP请求与响应处理
客户端向服务器端发送请求时,有时需要携带一些客户信息, 客户信息需要通过请求参数的形式传递到服务器端,比如登录操作。
清出于兰
2020/10/29
9900
HTTP请求与响应处理
06_Node.js服务器开发
Node.js开发属于服务器开发,那么作为一名前端工程师为什么需要学习服务器开发呢?
张哥编程
2024/12/13
1490
06_Node.js服务器开发
Node.js笔记
Node.js 是一个开源和跨平台的 JavaScript 运行时环境。Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核)
赤蓝紫
2023/01/02
1.2K0
Node.js笔记
《Node.js权威指南》:转换URL字符串与查询字符串
在HTTP服务中,服务器端可以从客户端请求所用的url中获取很多信息。nodejs中有url模块和queryString模块,分别用来获取完整url字符串中信息和查询字符串中信息。
前端_AWhile
2019/08/29
2K0
《Node.js权威指南》:转换URL字符串与查询字符串
Node.js之HTTP服务
当客户端请求过来,就会自动触发服务器的 request 请求事件,然后执行第二个参数:回调处理函数
兮动人
2021/06/11
1.2K0
Node.js之HTTP服务
请求响应原理及HTTP协议
网站应用程序主要分为两大部分:客户端和服务器端。 客户端:在浏览器中运行的部分,就是用户看到并与之交互的界面程序。使用HTML、CSS、JavaScript构建。 服务器端:在服务器中运行的部分,负责存储数据和处理应用逻辑。
梨涡浅笑
2020/10/29
1.4K0
请求响应原理及HTTP协议
Node.js GET、POST 请求是怎样的?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,它使 JavaScript 能够在服务器端运行。作为一种强大的后端开发工具,Node.js 提供了丰富的模块和功能,使开发人员能够轻松地构建高性能的网络应用程序。
网络技术联盟站
2023/07/07
9150
Node.js快速入门
下载最新版源码:https://nodejs.org/dist/v6.9.5/node-v6.9.5.tar.gz
程裕强
2022/05/06
11.6K0
nodejs创建HTTP服务器与前端通信示例(多demo)
前面几篇都在复习nodejs创建HTTP服务器的若干知识点,本篇将使用原生AJAX和nodejs的HTTP服务器配合写几个DEMO,加深运用理解,也方便时间长回顾备查,客户端使用file访问协议,服务端代码写在app.js中,客户端代码写在index.html中,所有demo均亲测可用。
前端_AWhile
2019/08/29
1.3K0
《深入浅出Node.js》-网络编程
Node 中提供了 net,dgram,http,https 四个模块,分别用来处理 TCP,UDP,HTTP,HTTPS,适用于客户端和服务器。
李振
2021/11/26
7340
Nodejs创建http客户端及代理服务器
nodejs除了可以通过http模块创建服务器,还能创建客户端,类似于浏览器那样很轻松的去向别的服务器发送请求并获取响应数据。
前端_AWhile
2019/08/29
2.4K0
Node.js资源
服务器端不需要处理,可以直接响应给客户端的资源就是静态资源,例如CSS、JavaScript、image文件。
Qwe7
2022/04/22
9310
Node.js中的进程与线程
1. 回顾进程和线程的定义 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 2. Node.js的单线程 Node特点主线程是单线程的 一个进程只开一个主线程,基于事件驱动的、异步非阻塞I/O,可以应用于高并发场景。 Nodejs中没有多线程,为了充分利用多核cpu,可以使用子进程实现内核的负载均衡,那我们就要解决以下问题: Node.js 做耗
用户1097444
2022/06/29
1.3K0
Node.js中的进程与线程
深入学习 Node.js Http
Expect 是一个请求消息头,包含一个期望条件,表示服务器只有在满足此期望条件的情况下才能妥善地处理请求。规范中只规定了一个期望条件,即 Expect: 100-continue,对此服务器可以做出如下回应:
阿宝哥
2019/11/05
9640
HTTP协议
超文本传输协议(英文: HyperText Transfer Protocol,缩写: HTTP)规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,
星辰_大海
2020/11/04
5310
HTTP协议
Node.js起步 -- (1)
  我们知道JavaScript是运行在浏览器中的,浏览器为它提供了一个上下文(context),从而让JavaScript得以解析执行。
书童小二
2018/09/03
2.8K0
Node.js起步 -- (1)
这里有一份Node.js入门指南和实践,请注意查收
JS 是脚本语言,脚本语言都需要一个解析器才能运行。对于写在 HTML 页面里的 JS,浏览器充当了解析器的角色。而对于需要独立运行的 JS,NodeJS 就是一个解析器。
null仔
2020/02/28
3.7K0
这里有一份Node.js入门指南和实践,请注意查收
相关推荐
《Node.js权威指南》:如何创建HTTP服务器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验