Feedback nest.js

Foloseste cineva nestjs? Care e experienta pana acum: plusuri si minusuri?

Eu plănuiesc sa l folosesc asa ca am parcurs documentația lor si exemplele de acolo. Eu il recomand deoare că framework isi face foarte bine treaba fara sa te încurce cu cine stie ce complexitatea. Dacă înțelegi depe dependency injections si module atunci nu ai de ce sa iti faci griji. E facut special pt MVC si îți permite să folosești lucruri inca relativ noi in limbaj. Ca performanță ai express in spate sau daca vrei poti sa treci pe fastify cu doar o line de cod, atâta timp cat modulele sunt compatibile

Ai un motiv bun pentru care ai nevoie de un framework pe backend ? NodeJS cu typescript si librariile minim necesare o sa te serveasca mai bine.

Eu as zice sa folosesti .NET Core sau Go pe backend, node e fain doar daca ai multa treaba cu websockets si graphql.

Daca vrei totusi sa folosesti un singur limbaj peste tot atunci nest e foarte ok pentru inceput.

1 Like

Mersi, @Georgian_Stan.

Am ceva experienta cu DI de la Symfony (am folosit acum cativa ani). In plus de asta, acum vreo 2 ani am inceput sa dezvolt un framework foarte asemanator cu nest (de care nu stiam atunci) - https://github.com/oors/oors. Tot bazat pe express (insa nu neaparat cuplat la express), cu DI, sistem de module destul de facil, integrare cu GraphQL poate mai buna decat are nest (tot bazata pe apollo server), mongodb integration (ceva mai calumea decat mongoose) si multe altele.

Insa prefer un framework popular si robust precum nest. Sa incep sa promovez propriul framework si sa il aduc la nivelul nest.js ar necesita un efort imens pe care nu mi l-as asuma. Ca sa nu mai zic ca as trece la TypeScript pe backend.

M-am uitat si eu rapid pe documentatia de la nest, pare destul de accesibil, sper sa devina Symfony al node.js. Daca imi place, probabil o sa incerc sa imi portez unele module in nest modules.

Ah, da, clar e nevoie de un framework pe backend in node. Ca in orice alta platforma / limbaj atata timp cat vrei sa faci ceva mai complex.

.NET core nu ma pasioneaza si probabil nu o sa folosesc niciodata. Go, Rust, Python (Django), Ruby (rails), Scala sunt alternative bune, dar pe criteriile mele niciunul nu bate node.

Cred ca nest e cel mai bun framework de backend la momentul actual (poate si cel mai complex), mai ales pentru APIs care sunt mai complexe decat un simplu CRUD. Poate loopback 4 ar fi avut sanse, dar cred ca a pierdut trenul.

Si, da, folosesc doar GraphQL, dar asta nu scoate din competitie celelalte limbaje. Scala, Python, ruby etc toate au suport bun pt gql.

Nu e clar ca e nevoie, ce te obliga ?

Eu chiar o sa zic ca folosesti node gresit daca crezi ca ai nevoie de un framework. Acum nu zic sa nu folosesti de exemplu apollo-graphql, zic ca nu ai nevoie de un ‘framework’ pe langa el. Ai destule librarii care pot fi folosite ca si o baza pentru o solutie proprie. Cand vezi ca deja ai nevoie de tot felul de dependency injection ca sa faci elegant un monolit atunci poate API-ul de graphql+rest ar trebui sa fie un microserviciu separat de API-ul graphql normal.

Serios, chiar ma intrebi la ce e bun un framework pe node? Mai zici apoi si ca il folosesc gresit nestiind la ce am lucrat / lucrez si ce vreau sa fac?

Ce experienta ai cu node? Ce fel de proiecte ai facut pana acum? Ce frameworkuri ai folosit pana acum? Care sunt primii pasi pe care ii faci pana ajungi sa implementezi domain logic?

Incerc sa imi dau seama daca ma intrebi pentru ca ai folosit frameworkuri si ai ajuns al concluzia ca sunt inutile, sau nu ai folosit si nu stii la ce sunt bune.

Cu ce te ajuta nest.js la domain logic ? Iti scrie if-urile, iti pune switch-uri in anotari, iti scrie testele singur ?

La munca am un ‘framework’ de automatizare implementat in node, se bazeaza pe mocha si imi permite sa fac absolut orice fara sa imi mai fac un framework peste el. Il utilizez cu TypeScript, care e destul sa imi organizez frumos pattern-urile. (page object-uri, teste, servicii de api-uri)

Pe backend am folosit express si mai mult m-a incurcat decat m-a ajutat, acum un an am invatat go si nu pun mana pe librarii/framework-uri decat daca sunt absolut pierdut. M-a ajutat sa inteleg ca nu ai nevoie de cine stie ce framework, te uiti la unul, iei ce idee iti place dar cam atat.

Nest imi aminteste de Angular, cand am pus prima data mana pe el sa scriu teste era absolut oribil sa inteleg cum functioneaza dependency injection-ul la rutari. E mult mai usor daca te poti baza pe documentatia jest/mocha si sa iti importi pur si simplu codul fara sa faci dependency injection peste dependency injection (ma refer la faptul ca ai deja ES modules si daca esti atent iti faci treaba doar cu export import, nu setezi fiecare clasa injectable pentru a deveni un provider ca jest oricum iti poate face override la argumente, spy la variabile sau poti crea mock-uri concrete)

1 Like

Iti recomand sa folosesti un framework si apoi o sa vezi diferentele.

Daca ar fi sa iti recomand un framework, atunci n-ar fi nest.js, s-ar putea sa ti se para complex. Incearca express / koa pentru inceput (care nu sunt frameworks per se), iar apoi ceva gen hapi.js. O sa iti placa :slight_smile:

1 Like

A trecut putin mai mult de o luna si il recomand cu incredere. Nest cu TypeScript e cu siguranta cea mai buna solutie pe care am intalnit-o pe node.js.

1 Like

Eu m-am uitat pe el si nu l-am folosit pentru ca am auzit ca baietii au multe chestii nedocumentate pentru ca vand consultanta, asa ca mai baga din cand in cand cate un breaking change cu erori misterioase si trebuie sa faci debug. Am auzit… Poate nu e adevarat, dar m-a ingrijorat. Nu-mi place ideea, asa ca mi-am facut eu un framework cu ce-am avut nevoie. Baza e inversify si on top diverse chestii de care ai nevoie. Daca ai DI, restul chestiilor le pui acolo dupa necesitati. In realitate nu ai nevoie de un framework.
Nu spun ca e un framework rau. Pe de alta parte, nici nu am facut chestii foarte complicate sa am nevoie de prea multe…

Asa auzisem si eu - ca unele lucruri nu sunt documentate cat trebuie - insa pana acum nu m-am lovit de asta, desi am parcurs si folosit cam tot ce pune la dispozitie, mai putin partea de microservices. Poate a fost cazul la un moment dat, dar acum documentatia pare bine pusa la punct.

Eu il folosesc cu GraphQL, iar integrarea cu TypeGraphQL e foarte buna (asta merge folosit si independent, e un framework in sine foarte bun).

Se gasesc zeci de exemple si boilerplates pe github (unele mai bune, altele mai putin bune), dar si articole pe dev.to si medium (insa cam tot ce apare prin ele e acoperit si de documentatie). Sunt si cateva module (extensii), desi nest vine deja cu foarte multe features.

Si eu dezvoltasem un framework propriu (insa nu foloseam TypeScript). Semana cu nest destul de mult: era modular, nu reinventam roata unde nu avea rost si foloseam biblioteci populare etc…
Insa realizem de ceva timp ca e un efort aproape inutil sa il mentin si sa continui sa il folosesc (mai ales ca il foloseau f putini developers inafara de mine).

Daca zici ca devine decenta documentatia, ma gandesc sa il iau si eu in considerare. Pana acum m-am descurcat foarte bine fara un framework. Am foslosit typescript pentru ca mi se pare ca fara ai destul de multe probleme.

Eu abia astept sa fie production ready deno… sa scapam de node. Sper ca intr-un an sa devina o optiune.

Daca intampini probleme cu nest, posteaza si pe aici un mesaj si, daca pot sa ajut, o fac cu placere.

Deno nu este nici la prima versiune. Node js a avut nevoie de 4 ani doar ca sa devina popular și apoi inca unu doi ca sa fie adoptat. Dar ce nu iti place la Node sau ce diferență aștepți sa vezi la deno de iti dorești sa scapi de node?

La node nu imi place ca dai npm install si nu se stie ce pachete ajung sa fie instalate. Aplicatiile node sunt o serioasa gaura de securitate.
npm install e cea mai periculoasa comanda pe care toata lumea o ruleaza cu zambetul pe buze ca si cum e ce trebuie.

Asta se intampla in orice alt limbaj de programare, mai scrie cineva oare aplicatii de la 0? Are vreun rost sa faci asta? Este viabil economic sa scrii de la 0 tot si sa faci mentenanta la tot?

Poti sa faci un audit pe pachete, sa te bazezi pe comunitate si pe ce le 751 de unelte care te ajuta sa iti tii pachete la zi si sa iti detecteze vulnerabilitatile in versiunile pe care le folosesti.

1 Like

In deno, marele castig este ca daca un pachet incearca sa acceseze orice resursa, trebuie sa dai explicit permisiunea.
Eu nu am spus sa scrii cod de la 0. Nu spun ca nu ar trebui sa folosim pachetele din comunitate. Toti le folosim. Nu putem altfel.
Cu toate tool-urile, au fost o serie de atacuri prin modificari in pachete de baza, iar cand au aparut acele atacuri, a fost un pic de panica in comunitate. Problema e ca alea sunt problemele de care stim. Eu as paria pe faptul ca sunt vulnerabilitati in pachete core de care nimeni nu stie si nu au fost identificate. Vor ajunge identificate accidental la un moment dat. Din pacate, asta-i mediul in care lucram.