QueryString.parse返回第一个值未定义

时间:2019-02-01 06:47:13

标签: javascript node.js

我正在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' }

3 个答案:

答案 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)