NodeJs——(8)http.ServerRequest的过程

简介: (25)http.ServerRequest的过程 ①http.ServerRequest提供了3个事件用于控制请求体传输: 【1】data:当请求体数据到来时,该事件被触发,提供一个参数给回调函数,是接受到的数据,该事件可能被多次调用(所有data按顺序的集合,是请求体数据)。如果该事件没有被监听,请求体将被抛弃;   【2】end:当请求体数据完成时该事件触发。此后不再触发da

(25)http.ServerRequest的过程

①http.ServerRequest提供了3个事件用于控制请求体传输:

【1】data:当请求体数据到来时,该事件被触发,提供一个参数给回调函数,是接受到的数据,该事件可能被多次调用(所有data按顺序的集合,是请求体数据)。如果该事件没有被监听,请求体将被抛弃;

 

【2】end:当请求体数据完成时该事件触发。此后不再触发data事件;

 

【3】close:用户当前请求结束时,该事件被触发。不同于end,如果用户强制终止了传输,也还是调用close

 

 

②获取GET请求内容

【1】GET请求被直接内嵌在路径中。URL是完整的请求路径(包括?后面的部分),因此手动解析后面的内容作为GET请求的参数。

 

Node.js的url模块中的parse函数提供了这个功能。

以url:http://127.0.0.1/user?name=byvoid&email=byvoid@byvoid.com为例:

先上代码:

var http = require("http");
var url = require("url");
var server = new http.Server();
server.on("request", function (req, res) {
    if (req.url == "/favicon.ico") {
        return;
    }
    var m = url.parse(req.url, true);
    console.log(m)
    res.writeHead(200, {'Content-type': 'text/html;charset = utf8'});
    res.end();
})
server.listen(80);
console.log("The server begin");

通过console.log返回的内容是:

Url {

  protocol: null,

  slashes: null,

  auth: null,

  host: null,

  port: null,

  hostname: null,

  hash: null,

  search:'?name=byvoid&email=byvoid@byvoid.com',

  query: { name: 'byvoid', email:'byvoid@byvoid.com' },

  pathname: '/user',

  path:'/user?name=byvoid&email=byvoid@byvoid.com',

  href:'/user?name=byvoid&email=byvoid@byvoid.com' }


其中几个关键是:

pathname是我们关心的url地址请求;而path是完整的部分

query是get方法的部分;在这里包含了name和email两个属性,他们中间用&相连接;

 

于是,想要获取GET请求的方法,只需要通过url的query部分即可;

 

 

③获取POST请求内容:

POST方法的请求内容,被放置在请求体之中,即之前的data、end、close相关事件;

 

post方法的请求体内容的解析方法是利用querystring模块的parse方法;

var http = require("http");
var querystring = require("querystring");
var server = new http.Server();
server.on("request", function (req, res) {
    if (req.url == "/favicon.ico") {
        return;
    }
    if (req.url !== "/post") {  //默认页面是这个
        var body = '<html>' +
            '<head>' +
            '<meta http-equiv="Content-Type" content="text/html; ' +
            'charset=UTF-8" />' +
            '</head>' +
            '<body>' +
            '<form action="/post" method="post">' +
            '<textarea name="text" rows="20" cols="60"></textarea>' +
            '<input type="submit" value="Submit text" />' +
            '</form>' +
            '</body>' +
            '</html>';
        res.writeHead(200, {'Content-type': 'text/html;charset = utf8'});
        res.write(body);
        res.end();
    } else {    //当提交表单后,跳转到这个页面
        var PostData = null; //这个变量用于存储全部数据
        req.on("data", function (data) {    //因为可能多次data事件,因此需要通过+=来完成
            PostData += data;
        })
        req.on("end", function () { //当data事件触发完毕后会触发这个事件,返回事件必须写在这里,不然PostData是空
            var message = querystring.parse(PostData); //进行解析,变成一个对象
            console.log(message); //显示这个对象
            res.writeHead(200, {'Content-type': 'text/html;charset = utf8'});   //返回
            if (PostData)
                res.write(message.nulltext);
            res.end();
        })
    }
})
server.listen(80);
console.log("The server begin");


 

PS:按照说明,这种方法有严重效率问题和安全隐患。因此不能在真正的生产环境中使用这种方法。

个人推测,实际使用中一般使用的都是模板,比如ejs或者jade

目录
相关文章
|
17天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
19天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
|
1月前
|
JavaScript
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
221 26
|
3月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
60 2
2024年5月node.js安装(winmac系统)保姆级教程
|
3月前
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
205 2
|
5月前
|
JavaScript
NodeJs的安装
文章介绍了Node.js的安装步骤和如何创建第一个Node.js应用。包括从官网下载安装包、安装过程、验证安装是否成功,以及使用Node.js监听端口构建简单服务器的示例代码。
NodeJs的安装
|
4月前
|
JavaScript 开发工具 git
已安装nodejs但是安装hexo报错
已安装nodejs但是安装hexo报错
86 2
|
4月前
|
JavaScript 算法 内存技术
如何降低node.js版本(nvm下载安装与使用)
如何降低node.js版本(nvm下载安装与使用)
|
5月前
|
存储 JavaScript 前端开发
Node 版本控制工具 NVM 的安装和使用(Windows)
本文介绍了NVM(Node Version Manager)的Windows版本——NVM for Windows的安装和使用方法,包括如何安装Node.js的特定版本、列出已安装版本、切换使用不同版本的Node.js,以及其他常用命令,以实现在Windows系统上对Node.js版本的便捷管理。
Node 版本控制工具 NVM 的安装和使用(Windows)
|
5月前
|
SQL JavaScript 数据库
sqlite在Windows环境下安装、使用、node.js连接
sqlite在Windows环境下安装、使用、node.js连接

热门文章

最新文章