# Jak v n8n řešit situaci, kdy potřebuji nastavit “globální” proměnnou pro loopování

**URL:** <https://forum.workflow.ooo/t/jak-v-n8n-resit-situaci-kdy-potrebuji-nastavit-globalni-promennou-pro-loopovani/55>\
**Category:** Tipy a triky\
**Tags:** n8n\
**Created:** [listopad 17, 2022, 4:44odp. UTC](https://forum.workflow.ooo/t/jak-v-n8n-resit-situaci-kdy-potrebuji-nastavit-globalni-promennou-pro-loopovani/55 "2022-11-17T16:44:05Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honzapav](https://forum.workflow.ooo/user_avatar/forum.workflow.ooo/honzapav/32/24_2.png) [@honzapav](https://forum.workflow.ooo/u/honzapav)\
**Post date:** [listopad 17, 2022, 4:44odp. UTC](https://forum.workflow.ooo/t/jak-v-n8n-resit-situaci-kdy-potrebuji-nastavit-globalni-promennou-pro-loopovani/55/1 "2022-11-17T16:44:05Z")

</div>

[n8n je open-source automatizační platforma](https://workflow.honzapav.cz/nastroj/n8n/), který může bez problémů konkurovat [Make.com](https://workflow.honzapav.cz/nastroj/make-com/) – pokud se nebojíte napsat pár řádků Javascriptu (to je hlavní výhoda, pro kterou n8n používám).

Řešil jsem teď situaci, kdy potřebuji:

1. přihlásit se k API a získat autorizační token,
2. stáhnout všechny objednávky za předchozí období (např. den) a
3. ke každé si zavolat znovu API a získat detailní informace o objednávce.

## V čem je problém?

Když chci původně získaný token využít v při druhém volání API (detail objednávky), token se do API requestu vyplní pouze u první objednávky. Při dalším loopování už na něj nedosáhnete a API request selže, protože už není autorizovaný.

## Řešení

Je to poměrně drobnost, kterou v [Make.com](http://Make.com) snadno vyřešíte. V n8n na to musíte jinak. Buď můžete pro každou objednávku znovu získávát token a to je sice funkční, ale ne moc elegantní. Logické by bylo získat token jednou a pak ho využít pro každý request. Funguje, ale sám se snažím dělat věci “správně” (pokud mají fungovat dlouho).

Druhá možnost je přidat do flow node `Function` (nastavení: spuštění kódu pro každý řádek), ve kterém můžete psát Javascript. Tady je ukázka:

```auto
// 1 – Vezmeme vstupní data z akuálního řádku
const item = $input.item;

// 2 – Do řádku vložíme token
item.json.token = $('login').item.json.data.token;

// 3 – Vrátíme celý objek řádku obohacený o token
return item;

```

Vysvětlím to ve větším detailu:

1. Nejprve vezmeme vstupní data. Data z předchozího modulu je možné vzít přes built-in metodu `$input.item` více [o built-in metodách a proměnných v dokumentaci](https://docs.n8n.io/code-examples/methods-variables-reference/). Připomenu, že node `Function` musí být nastavena na běh kódu pro každý řádek.
2. Do aktuálního řádku vložíme náš token. Ten získáme přes funkci, který umožńuje získávat data z jiných než vstupních nodes – `$(’název node’)`. Pak už je jen potřeba využít `dot notation` a odkázat na správná data. Uložení do objektu probíhá standardně podle pravidel Javascriptu. Do původního objektu `item` přidáme nové nové property `token`. Proč je to `item.json.token` a ne jen `item.token`? S tím jsem se dost natrápil a je to dané způsobem, jakým [v n8n fungují datové struktury](https://docs.n8n.io/data/data-structure/).
3. Nakonec data vrátíme celý objekt, abychom ho mohli využít v dalším kroky.

Ke každému řádku jsme přidali token a tak ho můžeme pro API call využít.

Snad je to srozumitelné 😄. n8n je boží a vmnoha ohledech předhání i [Make.com](http://Make.com). Ale pořád je to trochu geekovina. Asi bych se už měl hecnout a udělat nějaké větší představení.

Díky za feedback!
