Javascript Node.js中的URL组件编码

Javascript Node.js中的URL组件编码,javascript,node.js,urlencode,url-encoding,percent-encoding,Javascript,Node.js,Urlencode,Url Encoding,Percent Encoding,我想使用node.js发送http请求。我有: http = require('http'); var options = { host: 'www.mainsms.ru', path: '/api/mainsms/message/send?project='+project+'&sender='+sender+'&message='+message+'&recipients='+from+'&sign='+sign }; ht

我想使用node.js发送http请求。我有:

http = require('http');

var options = {
    host: 'www.mainsms.ru',
    path: '/api/mainsms/message/send?project='+project+'&sender='+sender+'&message='+message+'&recipients='+from+'&sign='+sign
    };

    http.get(options, function(res) {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    }).on('error', function(e) {
    console.log('ERROR: ' + e.message);
    });
当我的
路径像这样时:

/api/mainsms/message/send?project=geoMessage&sender=gis&message=tester_response&recipients=79089145***&sign=2c4135e0f84d2c535846db17b1cec3c6
它的工作。但是当
message
参数包含任何空格时,例如
tester response
all break。在控制台中,我看到http使用以下url:

  /api/mainsms/message/send?project=geoMessage&sender=gis&message=tester

如何发送空间。或者我就是不能在url中使用空格?

您要查找的内容称为

必须改为

path: '/api/mainsms/message/send?project=' + encodeURIComponent(project) +
'&sender=' + encodeURIComponent(sender) +
'&message=' + encodeURIComponent(message) + 
'&recipients='+encodeURIComponent(from) +
'&sign=' + encodeURIComponent(sign)
注意:


有两个功能可用。和。当必须对整个URL进行编码时,需要使用
encodeURI
;当必须对查询字符串参数进行编码时,需要使用
encodeURIComponent
,如本例所示。请阅读详细说明。

最好的方法是使用本机模块:

var qs=require('querystring');
log(qs.escape('Hello$é“\'&=');
//'你好%20%24%20%C3%A9%20%22%20\'%20%26%20%3D'

这是一个本机模块,因此您不必安装任何东西。

问题是针对Node.js。
encodeURIcomponent
未在Node.js中定义。请改用
querystring.escape()
方法

var qs = require('querystring');
qs.escape(stringToBeEscaped);

您需要进行URL编码。@TheFourtheye:您能给出一些示例或链接来阅读吗?这里可能有Necromancer的副本……这个答案无效,encodeURIComponent是一个窗口属性,因此它仅在浏览器中可用,而不是Node.js(请参阅标题)@JulienCROUZET实际上
encodeURIComponent
也可以在Node.js中使用。它是由v8提供的。请检查。它/可能/可用,它在ECMA中定义,但在Node.js文档中不存在,因此没有LTS或其他保证。/Official/方式是查询字符串模块我不确定我是否理解。你是说我不应该理解吗建议数组、字符串等函数,仅仅因为它们不在NoDE.js文档中。为了阐明Fothe Tythye的点,考虑节点的本地查询字符串模块(它已经被UrLeSracPARAMS有效地贬低)显得更奇怪了。“比一个正式的国际标准所规定的作为语言本身一部分的功能更重要:)为什么这不是公认的答案?我认为应该是这样。当问题最初发布(2013年)时,Node.js中没有encodeURIComponent。即使在2016年,它在Node.js的许多打包版本中都不可用,即使它在(比如)版本6中可用。我想是时间问题吧?
var qs = require('querystring');
qs.escape(stringToBeEscaped);