JavaScript Blog

Node.JS Query String elkapási módszerek

2022. június 11. - Webdeveloper

Egyik előző posztomban a Query String-ek fogalmáról írtam, pont azért, hogy ebben a cikkben már ne kelljen külön kitérni rá. Így most itt bemutatok néhány lehetséges módot a Query String-ek elkapására Node.JS alatt.

node-query.png

Node - QueryString Legacy Módszer


const http = require("http");
const querystring = require("node:querystring");
http.createServer(main).listen(8080, () => console.log("Server started..."));

function main(req, res) {
  res.setHeader("Content-Type", "application/json");
  const parsedURL = JSON.stringify(
    querystring.parse(req.url.split("?")[1]),
    null,
    "\t"
  );
  res.write(parsedURL);
  res.end();
}

 A req.url-el megkapjuk a protokolt, a domainnevet, a path-ot és a query stringet is. A split-el ezt ketté szedjük, így egy tömböt kapunk. A tömb első eleme a protokol, a domainnév, a path. A második maga a query string.

 A const querystring = require("node:querystring"); -t használva, annak parse metódusának a req.url-ből levágott query srting-eket átadjuk, a JSON.sstringify-nek átadva majd azt egy parsedUSL változóba téve a res write metódusával kiírathatjuk.

DEMO
https://9yqk0e.sse.codesandbox.io/?parameter1=1&parameter2=2&parameterA=A&parameterB=B&parameter1=1.1

Json válasz:

// A https://9yqk0e.sse.codesandbox.io/ válasza
	{
	"parameter1": [
		"1",
		"1.1"
	],
	"parameter2": "2",
"parameterA": "A", "parameterB": "B" }

 

A query-string NPM csomag használata
A csomagot telepíteni kell globálisan, vagy a projekthez, az npmjs-en leírtak szerint.


const http = require("http");
const queryString = require("query-string");
http.createServer(main).listen(8080, () => console.log("Server started..."));

function main(req, res) {
  res.setHeader("Content-Type", "application/json");
  const parsedURL = JSON.stringify(
    queryString.parse(req.url.split("?")[1]),
    null,
    "\t"
  );
  res.write(parsedURL);
  res.end();
}

Itt szintén a le-splittelt query string-ket kell átadni a parse metódusnak, majd az előzőkhez hasonlóan JSON.stringify, majd a kapott változót a response write metódusába tesszük. 

DEMO
https://sik8g4.sse.codesandbox.io/?a=1&b=2&c=3&a=4&c=5&a=6&a=7&b=8

JSON válasz:

// A https://sik8g4.sse.codesandbox.io válasza
{
	"a": [
		"1",
		"4",
		"6",
		"7"
	],
	"b": [
		"2",
		"8"
	],
	"c": [
		"3",
		"5"
	]
}

 

URLSearchParams-t használva minden hozzáadott csomag nélkül


const http = require("http");
http.createServer(main).listen(3000, () => console.log("Server started..."));

function main(req, res) {
  const paramstring = req.url.split("?")[1];
  const params = new URLSearchParams(paramstring);
  const response = {};
  params.forEach(function (value, key) {
    if (response[key] !== undefined) {
      if (typeof response[key] === "string") {
        const oldkey = response[key];
        response[key] = [oldkey, value];
      } else {
        response[key].push(value);
      }
    } else {
      response[key] = value;
    }
  });

  console.log(response);

  res.setHeader("Content-Type", "application/json");
  res.write(JSON.stringify(response, null, "\t"));
  res.end();
}

 

Szintén a levágott query string splittet átadva a URLSearchParams egy új példányának egy objektumot kapunk a query sringjeinkből, amit a fenti példában a params változóba tette.
A params-on forEach-al kell végigmenni, hogy egy új objektumba helyezve az egyforma query string kulcsokból értékként tömböt kapjunk. Ezt egy if statement vezérli.
A fenti és a lenti JSON kimeneti példán is látható, hogy az egyszer használt paraméter kulcsoknak string-ek a sz értékei, amíg a többször használtaknak tömbök.

DEMO: https://21g8dn.sse.codesandbox.io/?a=1&a=2&b=3&c=4&c=5&a=6

JSON válsz

// A https://21g8dn.sse.codesandbox.io válasza
{
	"a": [
		"1",
		"2",
		"6"
	],
	"b": "3",
	"c": [
		"4",
		"5"
	]
}

 

Ezeket a stringeket elkapva a query-stringek definíciójáról készült postomban bemutatott lehetőségek szerint lehet alkalmazni.

A bejegyzés trackback címe:

https://jscript.blog.hu/api/trackback/id/tr3117854953

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Webdeveloper 2022.06.11. 20:52:40

Plusz 1 módszer:
jscript.blog.hu/2022/06/11/nodejs_query-string_az_url_csomag_segitsegevel
süti beállítások módosítása