搜索
您的当前位置:首页正文

分享NodeJS中queryString介绍

2023-12-01 来源:亿米科技网
前面的话

无论是前端还是后端,经常出现的应用场景是URL中参数的处理。nodeJS的queryString模块提供了一些处理 query strings 的工具。本文将详细介绍nodeJS中的queryString

var querystring = require('querystring');/*{ unescapeBuffer: [Function], unescape: [Function: qsUnescape], escape: [Function], encode: [Function], stringify: [Function], decode: [Function], parse: [Function] } */console.log(querystring);
序列化

【querystring.parse(str[, sep[, eq[, options]]])】

querystring.parse()方法能把一个URL查询字符串(str)解析成一个键值对的集合,参数如下

str <String> 要解析的 URL 查询字符串。sep <String> 用于界定查询字符串中的键值对的子字符串。默认为 '&'。eq <String> 用于界定查询字符串中的键与值的子字符串。默认为 '='。options <Object>decodeURIComponent <Function> 当解码查询字符串中百分号编码的字符时使用的函数。默认为 querystring.unescape() maxKeys <number> 指定要解析的键的最大数量。默认为 1000。指定为 0 则移除键数的限制
var querystring = require('querystring');var str = 'foo=bar&abc=xyz&abc=123';console.log(querystring.parse(str));//'{ foo: 'bar', abc: [ 'xyz', '123' ] }'

第二个参数用于界定查询字符串中的键值对的子字符串

var querystring = require('querystring');var str = 'foo=bar&abc=xyz&abc=123';console.log(querystring.parse(str,'a'));//{ foo: 'b', 'r&': '', bc: [ 'xyz&', '123' ] }

第三个参数用于界定查询字符串中的键与值的子字符串

var querystring = require('querystring');var str = 'foo=bar&abc=xyz&abc=123';console.log(querystring.parse(str,'&','c'));//{ 'foo=bar': '', ab: [ '=xyz', '=123' ] }

[注意]querystring.parse()方法返回的对象不继承自 JavaScript 的 Object。 这意味着典型的 Object 方法如 obj.toString()、obj.hasOwnProperty() 等没有被定义且无法使用

默认情况下,查询字符串中的百分号编码的字符会被认为使用了 UTF-8 编码。 如果使用的是另一种字符编码,则 decodeURIComponent 选项需要被指定

var querystring = require('querystring');//{ w: '????', foo: 'bar' }console.log(querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null,{ decodeURIComponent: 'gbkDecodeURIComponent' }));

【querystring.stringify(obj[, sep][, eq][, options])】

querystring.stringify()方法是querystring.parse()方法的逆向操作,通过遍历对象的自有属性,从一个给定的obj产生一个URL查询字符串,参数如下

obj <Object> 要序列化成一个 URL 查询字符串的对象sep <String> 用于界定查询字符串中的键值对的子字符串。默认为 '&'eq <String> 用于界定查询字符串中的键与值的子字符串。默认为 '='options encodeURIComponent <Function> 当把对URL不安全的字符转换成查询字符串中的百分号编码时使用的函数。默认为 querystring.escape()
var querystring = require('querystring');//'foo=bar&baz=qux&baz=quux&corge='console.log(querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }));
var querystring = require('querystring');//'foo:bar;baz:qux'console.log(querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':'));
编码

【querystring.escape(str)】

querystring.escape()方法对给定的str执行URL百分号编码,与encodeURIComponent方法一样

querystring.escape()方法是供querystring.stringify()使用的,且通常不被直接使用。它之所以对外开放,是为了在需要时可以通过给querystring.escape赋值一个函数来重写编码的实现

var querystring = require('querystring');console.log(encodeURIComponent('测试'));//%E6%B5%8B%E8%AF%95console.log(querystring.escape('测试'));//%E6%B5%8B%E8%AF%95

【querystring.unescape(str)】

querystring.unescape() 方法对给定的 str 上的 URL 百分号编码的字符执行解码

querystring.unescape()方法是供querystring.parse()使用的,且通常不被直接使用。它之所以对外开放,是为了在需要时可以通过给querystring.unescape赋值一个函数来重写解码的实现。

querystring.unescape()方法默认使用JavaScript内置的decodeURIComponent() 方法来解码

var querystring = require('querystring');console.log(decodeURIComponent('%E6%B5%8B%E8%AF%95'));//'测试'console.log(querystring.unescape('%E6%B5%8B%E8%AF%95'));//'测试'
GET

get请求的数据保存在URL中

http://127.0.0.1:8080/home/test?a=1&b=2
var http = require('http');var url = require('url');var querystring = require('querystring');http.createServer(function(req,res){var urlObj = url.parse(req.url);var query = urlObj.query;var queryObj = querystring.parse(query); console.log(req.url);//'/home/test?a=1&b=2'console.log(query);//'a=1&b=2'console.log(queryObj);//{ a: '1', b: '2' }}).listen(8080);
POST

post请求的数据会被写入缓冲区中,需要通过request的data事件和end事件来进行数据拼接处理

var http = require('http');var url = require('url');var querystring = require('querystring');http.createServer(function(req,res){var str = ''; req.on('data', function(thunk){ str += thunk; }); req.on('end', function(){ console.log(str);//'name=a&email=b%40b.com'var queryObj = querystring.parse(str); console.log(queryObj);//{ name: 'a', email: 'b%40b.com' } }); }).listen(8080);

小编还为您整理了以下内容,可能对您也有帮助:

Url参数处理方法(js,querystring,lodash)

我们在处理url的跳转时,往往会在url后面带着很多参数。有时候需要把这些参数转化成对象当作参数进行跳转或其他之用,比如angular2的 routerLink的地址是不带参数的,参数写在 queryParams里,这时候就需要对url进行处理。

当然可能还有其他地方可能会用到此类转换。

下面介绍对于url参数的几种转换方法

1.   js处理,利用split()和循环实现

结果 { a: 10 , b :2}

2.  利用querystring

     querystring是在node封装好的一个模块,有处理string的方法直接处理这种地址

这种方法可以直接进行处理

参考链接 Query String       querystring 模块的使用

3. 利用lodash处理

结果也是正确的。

不过lodash不会,所以把别人提供的方法放在这,再来在细细研究lodash

此方法已更新至文章  Lodash使用入门

参考链接   lodash文档

NodeJShttp请求获取get和post参数

获取到请求的url:在onRequest(request, response) ----》request.url

获取到路由名字: url(url模块).parse(request.url).pathname

获取到对应参数值:

1.先获取到所有参数队列:url(url模块).parse(request.url).query

2.取出队列中对应的参数值:querystring(模块).parse(countQuery《参数队列》)["参数key"]

nodejs内置模块有哪些

一、Express框架

前面的章节已经介绍过了,可以使用npm来安装node.js模块。具体操作请参照以前写的nodejs概论。

Express是一个nodejs的web开源框架,用于快速的搭建web项目。其主要集成了web的http服务器的创建、静态文本管理、服务器URL地址请求处理、get和post请求处理分发、session处理等功能。

使用方法,在cmd中打开你所想创建web项目的路径。然后输入

Express appname

即可创建一个名为appname的web项目。控制台打印结果

在cmd中进入appname文件夹输入

node appname.js

返回结果如下图,表示安装成功!

在项目开发中经常会出现这样的问题

此错误表示没有安装相关模块,解决办法是在cmd上打开项目文件夹,输入

npm install express

安装成功后会在本文件路径下生成一个node_moles,里面包含了Express框架代码。

其他模块也可用类似的方法进行安装,安装后的路径同样是在node_moles下。

二、jade模块

jade是一款高性能、简洁易懂的模板引擎。可通过jade来编写html文件。

jade类似一个用于快速编写html的语言,其编写后的文件后缀为.jade。

以下为文件的内容

在cmd中输入,压缩的过的可以通过加-P来不压缩,如果每次更改模版都要打命令行一次很麻烦是不是,我们可以通过加上jade -P -w jade.jade  加上一个-w来开启监视模式,每次更改模版,html文件都会自动编译咯

生成后的html文件如下:

在jada文件中是可以使用for循环和if判断语句的,可以让你体会类似JSP的<%%>和php的<php></php>在网页上输出数据的快感。

三、forever模块

nodejs作为http服务器,需要确保服务顺利进行,要注意一下两点:

1.后台服务运行,监控运行日志,以及http运行日志;

2.确保项目的正常安全运行,Node.js的启动命令node,很大程度无法满足运行需求;

Node.js的forever模块在第二点就可以起到很大的作用,同时其拥有监控文件更改、自动重启等功能。

forever模块的使用方法有两种:1.在命令行中使用

forever -l forever.log -o out.log -e err.log app.js

-l forever.log -o out.log -e err.log分别指定了forever的运行日志,脚本流水日志,脚本运行错误日志,启动后将在本文件夹下产生out.log、err.log文件。

2.在编码中require forever模块使用。

四、Socket.IO模块

Socket.IO模块主要功能是将WebSocket协议应用到所有浏览器。主要用于实时的长连接多求情项目中。

例如:在线联网游戏,实时聊天、实时股票查看、二维码扫描登录等。

安装方法仍然是在cmd在中输入npm install socket.io

如何使用Socket.IO来创建一个项目。

需要分别实现服务端和客户端的逻辑:

先创建一个服务端的node.js脚本index_server.js

var app = require('http').createServer(handler)//创建服务器app

, io = require('socket.io').listen(app)//引用socket.io模块监听app

, fs = require('fs')//引用文件处理模块

app.listen(80);//指定app监听的端口,第二个参数127.0.0.1可省略

function handler (req, res) {

fs.readFile(__dirname + '/index.html',   function (err, data) {     if (err) {

res.writeHead(500);       return res.end('Error loading index.html');

}

res.writeHead(200);

res.end(data);

});

}

io.sockets.on('connection', function (socket) {

socket.emit('news', { hello: 'world' });

socket.on('my other event', function (data) {

console.log(data);

});

});

其中,socket.emit()为Socket发送消息的函数,第一个参数表示发送消息的key值,第二个参数为发送消息的内容,也就是发送的数据。

Socket。on()为Socket接收消息的函数,第一个参数为接收消息的可以值,第二个参数为回调函数,其中回调函数携带的参数为接收消息所发送的数据。

接下来web前端如何使用JavaScrit 来连接Socket服务器。

新建一个index_client.html

<script type="text/javascript" src="socket.js"></script>

<script type="text/javascript">    var socket = io.connect('http://localhost');//创建本地sock连接

socket.on('news',function (data) {//Socket接收news消息时执行回调函数        console.log(data);

socket.emit('my other event',{my:'data'});

});</script>

<script type="text/javascript" src="socket.js"></script>加载已经安装好的Socket.io的本地JavaScrit文件。

var socket = io.connect('http://localhost');因为端口为80,所有这里可以不端口号

socket.on('news',function (data){}//客户端接收news消息成功后,发送my other event消息到服务端,发送的消息内容为json对象{my:'data'}

接下来只需要运行服务端的index_server.js文件来启动socket服务

效果:在浏览器输入http://127.0.0.1按F12调出浏览器的控制台console即可看见打印出了一个object对象。

执行完毕后可能会报错:catnot find mole socket.io,说明你的socket.IO没有安装,或已经安装并配置为全局,但你的安装路径并没有配置到在path中,所有无法引用。

你可以选择配置path,或者安装到项目内。这里建议安装到你的项目目录下,而不是简单粗暴的配置为全局。先卸载npm uninstall socket.io 进入指定目录后安装node index_server.js

socket.io详细请参阅    http://cnodejs.org/topic/50a1fcc7637ffa4155b5a264

五、request模块

request模块为开发者提供了一种简单访问HTTP请求的方法。request还支持HTTPS的访问方法。

安装:

npm install requset

request模块基本上覆盖了所有的HTTP请求方式如GET,POST,HEAD,DEL等。但其最基本的两个方法是request.get()和request.post().

get和post的区别

get:

1.使用get向服务器发出和接收的请求会附在url之后。类似:http://www.baidu.com?id=1221&name=5555这个url中传递了两个参数,一个为id,一个为name。

2.get请求不能超过1024个字节。

post没有,也不会附在url上。

接下来做一个简单的实例

get实例:

首先新建一个服务器app_get.js

var http= require("http");

http.createServer(function(req,res){

res.writeHead(200,{'content-Type':'text/plain'});

res.end('Hello worldn'+req.method);

}).listen(1337,"127.0.0.1");

再建一个发送求情的request_get.js文件

var request=require('request');

request.get("http://127.0.0.1:1337",function(error,response,result){

console.log(result);

});

在CMD中运行app_get.js,运行成功后,再打开一个cmd(之前的cmd不要关闭),执行request_get.js文件。

执行后的结果如下

hello world

GET

可以看出,通过request.get方法访问

http://127.0.0.1:1337 返回的结果就是res.end()的参数

post实例:

和上面一样,先新建服务器app_post.js

var http= require("http"),

querystring=require('querystring');

http.createServer(function(req,res){    var postData="";    //开始异步接收客户端post的数据

req.addListener("data",function (postDataChunk) {

postData += postDataChunk;

});    //异步post数据接收完毕后执行匿名回调函数

req.addListener("end",function(){        var postStr=JSON.stringify(querystring.parse(postData));

res.writeHead(200,{'content-Type':'text/plain'});

res.end(postStr+'n'+req.method);

});

}).listen(1400,"127.0.0.1");

然后再新建一个request_post.js

var request=require("request");

request.post('http://127.0.0.1:1400',{form:{'name':'ermu','book':'node.js'}},function (error,response,result) {

console.log(result);

})

像上面一样在cmd中执行后显示的结果如下:

D:nodejssrcrequest>node request_post.js

{"name":"ermu","book":"node.js"}

POST

request post提交了一个json对象{"name":"ermu","book":"node.js"}而服务器接通过获取该POST数据,然后返回客户端,同时将http请求方式也响应到客户端。

request post参数可以有两种传递方式。

其中,第一种是将url和form表单的数据作为json参数在request post传递。举例如下:

request.post('url':'http://127.0.0.1:1400',form:{'name':'ermu','book':'node.js'}},function (error,response,result) {

console.log(result);

})

另一种是将url和form作为两个参数,上面的实例就是使用这种方法。

六、  Formidable模块

该模块的目的是为了解决文件上传。

在原生的node.js模块中,提供了获取post数据的方法,但是并没有直接获取上传文件。

nodejs 中express框架中request有哪些属性和方法

最近本人在学习开发NodeJs,使用到express框架,对于网上的学习资料甚少,因此本人会经常在开发中做一些总结。

express获取参数有三种方法:官网介绍如下

Checks route params (req.params), ex: /user/:id

Checks query string params (req.query), ex: ?id=12

Checks urlencoded body params (req.body), ex: id=

1、例如:127.0.0.1:3000/index,这种情况下,我们为了得到index,我们可以通过使用req.params得到,通过这种方法我们就可以很好的处理Node中的路由处理问题,同时利用这点可以非常方便的实现MVC模式;

2、例如:127.0.0.1:3000/index?id=12,这种情况下,这种方式是获取客户端get方式传递过来的值,通过使用req.query.id就可以获得,类似于PHP的get方法;

3、例如:127.0.0.1:300/index,然后post了一个id=2的值,这种方式是获取客户端post过来的数据,可以通过req.body.id获取,类似于PHP的post方法;

下面举例介绍下这三个方法:

如下一个test.html代码

<form action="/index" method="get">

<input type="text" name="login_name"/>

<input type="submit" value="Sign In" />

</form>

在nodeJs中我们要自定义HTTP,因此创建index.js

var app = require('express').createServer();

app.get('/:key', function(req, res){

console.log(req.params.key);//输出index

console.log(req.query.login_name);//输出表单get提交的login_name

res.send('great you are right for get method!');//显示页面文字信息

});

app.post('/:key', function(req, res){

<pre name="code" class="javascript"> console.log(req.params.key);//输出index

console.log(req.body.login_name);//输出表单post提交的login_name

res.send('great you are right for post method!');//显示页面文字信息

});app.listen(3000);

之后运行node index.js就可以看到本效果,当然前提是你要先访问test.html,至于如何通过express访问一个html文件我就不详细描述了,可以参考如下代码:

global.fs=require('fs');

var realpath = VIEW + "test.html";

var file = fs.readFileSync(realpath);

res.end(file);

亿米科技网还为您提供以下相关内容希望对您有帮助:

Url参数处理方法(js,querystring,lodash)

下面介绍对于url参数的几种转换方法 1.   js处理,利用split()和循环实现 结果 { a: 10 , b :2} 2.  利用querystring      querystring是在node封装好的一个模块,有处理string的...

nodejs querystr.stringify是什么格式

querystring.stringify(obj, [sep], [eq])接收参数:obj 欲转换的对象 sep 设置分隔符,默认为 ‘&amp;'eq 设置赋值符,默认为 ‘='

如何nodejs中发送post请求

也就是说,调用了querystring.stringify方法之后,变成了action_name=QR_LIMIT_SCENE&amp;action_info=。

nodejs 中express框架中request有哪些属性和方法

在nodeJs中我们要自定义HTTP,因此创建index.js var app = require('express').createServer();app.get('/:key', function(req, res){ console.log(req.params.key);//输出index console.log(req.query.login_name)...

nodejs post请求和gat请求之间的区别

3 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。4 get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中...

nodejs怎么post文件流

利用nodejs中的 http.ServerRequest中获取1):request.method 用来标识请求类型 request.headers 其中我们关心两个字段:content-type 包含了表单类型和边界字符串(下面会介绍)信息。content-length post数据的长度 关于content-...

nodejs内置模块有哪些

前面的章节已经介绍过了,可以使用npm来安装node.js模块。具体操作请参照以前写的nodejs概论。 Express是一个nodejs的web开源框架,用于快速的搭建web项目。其主要集成了web的http服务器的创建、静态文本管理、服务器URL地址请求处理、get和...

Nodejs 如何过滤掉特殊字符

将对象转换成字符串,字符串里多个参数将用 ‘&amp;' 分隔,将用 ‘=' 赋值。这个函数的操作和 querystring.parse() 是相反的,具体可以看一下例子就了解了。

前端html页面采用ajax传过去的数据后端用nodejs怎么接收

;req.on('end', function(){ //在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。post = querystring.parse(post);res.end(util.inspect(post));});}).listen(3000);

NodeJS项目基础结构简单介绍

按照常规,去执行npm start 或者在Terminal中手动输入命令,结果如下:可以看到是执行了test/package.json文件中的 start 命令,初始packagejson.json文件内容如下:执行 start ,对应的命令为 node ./bin/www 并在命令行执行...

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

热门图文

Top