1. ホーム
  2. javascript

[解決済み] クエリとは何ですか。url.parse()でnodeJSを使用して、[Object: null prototype]を指定しています。

2022-02-08 22:13:06

質問

私は今、自分のプロジェクトのためにnodeJSを学び始めていて、まだnodeJSのやり方に適応しているところです。 私の質問は、クエリが何を意味するのかです。url.parse(request.url, true)にアクセスする際に.queryメソッドにアクセスすると、 [Object: null prototype]と表示されるのはどういう意味ですか? 私は少し混乱しています。私はちょうど私が見ているビデオチュートリアルを試してみたいのですが、私はエラーを持っているので、キャッチアップすることはできません。助けてくれてありがとうございます。

以下は私のコードです。

const http = require('http');
const url = require('url');
const port = 8080;

const server = http.createServer();

server.on('request', (request, response) => {
    const urlParsed = url.parse(request.url, true);
    console.log(urlParsed);
    if (request.method === 'GET' && request.pathname === '/metadata') {
        const { id } = urlParsed.query;
        console.log(id) <<<<<<<<<<<<<<<< I cannot output this in the CLI
    }
});

server.listen(port, () => {
    console.log(`Server is listening to localhost:${ port }`)
});

では curl http://localhost:8080/metadata/?id=1

次にCLIで出力

Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '?id=1',
  query: [Object: null prototype] { id: '1' },
  pathname: '/metadata/',
  path: '/metadata/?id=1',
  href: '/metadata/?id=1'
}

解決方法は?

これはつまり query プロパティが指すオブジェクトは null プロトタイプを使用します。プロトタイプは、javascriptが継承のために使用するメカニズムで、実際にはプロパティアクセスの委譲です。つまり、ここでは query オブジェクトは何のプロパティも継承せず、特に Object.prototype .

空白のオブジェクトをコンソールロギングすると、同様の出力が得られます。 null プロトタイプを使用します。

var object = Object.create(null)
console.log(object)

// output: [Object: null prototype] {}

このとき parseQueryString の2番目のパラメータである url.parse() が真であれば、クエリオブジェクトを取得するために querystring モジュール parse() メソッドを使用します。実はこのメソッドについて、ドキュメントではこのように指定されています。

が返すオブジェクトは querystring.parse() メソッドは、プロトタイプ的にはJavaScriptの Object .

https://nodejs.org/api/querystring.html#querystring_querystring_parse_str_sep_eq_options