我正在REPL中使用nodejs进行练习,已经给了我一个URL,并且在通过process.argv []访问它以检索a和b的值后,需要在上面使用querystring.parse()。将它们记录到控制台。这是字符串:
“ http://127.0.0.1:8080/test?a=100&b=200”
到目前为止,这是我的代码
const qs = require("querystring");
function fn() {
var query = qs.parse(process.argv[2]);
console.log("query a is " + query["a"]);
console.log("query b is " + query["b"]);
}
module.exports.fn = fn();
该练习要求最后两个控制台日志返回如下:
'query a is 100'
'query b is 200'
但是我得到的输出是:
query a is undefined
query b is 200
当我返回查询对象本身时,我得到了:
{ 'http://127.0.0.1:8080/test?a': '100', b: '200' }
答案 0 :(得分:1)
qs解析查询字符串而不是URL。
尝试使用URL解析器。
(new URL(addr).search.substring(1))
qs.parse("title=querystring&action=edit")
要通过参数,请致电
new URL(addr).searchParams
答案 1 :(得分:1)
我认为您需要使用“ url”模块来解析完整的url,因为“ querystring”模块本身只能正确解析查询字符串。
const url = require("url")
const qs = require("querystring");
function fn() {
const parsedUrl = url.parse(process.argv[2])
const query = qs.parse(parsedUrl.query);
console.log("query a is " + query["a"]);
console.log("query b is " + query["b"]);
}
module.exports.fn = fn();
答案 2 :(得分:0)
因为querystring仅解析查询,所以tis将为您提供模块解析的两个查询
const qs = require("querystring");
function fn() {
var query = qs.parse(process.argv[2]);
console.log("query a is " + query["http://127.0.0.1:8080/test?a"]);
console.log("query b is " + query["b"]);
}
module.exports.fn = fn();
否则,您可以使用url模块
var url = require('url');
var url_parts = url.parse('http://127.0.0.1:8080/test?a=100&b=200', true);
var query = url_parts.query;
console.log(query)