madeindjs/rest-api.ts

Erreur connection

Closed this issue · 11 comments

Bonjour 🙂.
Je suis en train de suivre ton livre sur l'API Rest avec TS que je trouve super, merci pour ton travail.

J'ai suivi à la lettre tes instructions mais j'ai une erreur lors du premier curl sur la route Index() du Controller des utilisateurs.
J'ai cette erreur dans le fichier user.entity.ts : SyntaxError: Cannot use import statement outside a module

import {
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Object.compileFunction (node:vm:352:18)
    at wrapSafe (node:internal/modules/cjs/loader:1025:15)
    at Module._compile (node:internal/modules/cjs/loader:1059:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1124:10)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:816:12)
    at Module.require (node:internal/modules/cjs/loader:999:19)
    at require (node:internal/modules/cjs/helpers:93:18)
    at E:\Dépôt Perso\Sébastien\Coding\Projets\API-Bannis\node_modules\typeorm\util\DirectoryExportedClassesLoader.js:42:39
    at Array.map (<anonymous>)

J'essai d'avancer avec des recherches sur internet mais en vain...
As-tu une idée ?

Merci

Hello @sebastienbages ,

Merci pour ton retour, ça me fait très plaisir!

Pour ton problème, cela peut venir de la version de Node.js que tu utilise sur ton environnement. Quelle version utilise tu (node -v) ?

La solution la plus simple est d'utiliser une version plus récente. SI ce n'est pas une option, il faut rajouter le flag --experimental-modules à chaque appel node (donc dans le package.json et nodemon.json).

Je te laisse ré-ouvrir l'issue si ça ne fonctionne toujours pas

Hey @madeindjs !

J'utilise la dernière version (16.5.0).
Cela ne fonctionne pas non plus avec le flag.
Voici mon repos si tu veux y jeter un oeil : https://github.com/sebastienbages/API-Bannis

Je me demande, notre API est censée fonctionner avec un fichier plat sqlite ?

Je viens de cloner le repo et de lancer npm run start & npm run start:watch et ça fonctionne bien. J'ai fait le test avec la version v14.15.4 et v16.5.0.

Es-tu sûr de ta version ? Voici mon test:

$ git clone git@github.com:sebastienbages/API-Bannis.git
$ cd API-Bannis
$ git checkout dev
$ npm install
$ npm start

> api-bannis@1.0.0 start /tmp/API-Bannis
> tsc && node --experimental-modules dist/src/main.js -r dotenv/config

Listen on http://localhost:3000/

et avec 16.5

$ nvm install 16.5.0
$ nvm use 16.5.0
$ rm -r node_modules
$ npm install
$ npm start         

> api-bannis@1.0.0 start
> tsc && node --experimental-modules dist/src/main.js -r dotenv/config

Listen on http://localhost:3000/

Je me demande, notre API est censée fonctionner avec un fichier plat sqlite ?

Oui exactement, il faut avoir un fichier ormconfig.json qui spécifie le type de base de données

De mon côté, la compilation et le lancement se passe bien aussi.
L'erreur se produit avec curl http://localhost:3000/users

Effectivement, j'ai pu lire sur la doc de TypeOrm qu'il est nécessaire d'utiliser un fichier ormconfig.json.
Or, cela ne figure pas dans ton tuto et l'erreur se produit malgré la mise en place de ce fichier.
Mais, je ne suis pas certain qu'il soit possible d'utiliser un fichier plat avec celui-ci ?
En tout cas je n'ai pas trouvé d'info complémentaires dans la doc à ce sujet.

Tu as plusieurs solutions pour la connection avec TypeORM comme le spécifie la doc. Celle que j'ai choisie dans le livre, est d'utiliser les variables d’environnement. La config se trouve donc dans le fichier .env.

J'aborde tout ça dans le chapitre 3 😉

Yes ! Ton travail est super et j'aurai beaucoup aimé aller au bout mais le premier curl ne passe pas.
J'ai passé beaucoup de temps à chercher la solution, as-tu déjà eu des retours ?

Oui mais tu est les premier sur la version française (que je n'ai pas encore publié)

Ce que je comprend pas c'est que la requête cURL curl http://localhost:3000/users est dans la section "Création du contrôleur des utilisateurs". Or tu aurais du mettre en place TypeORM dans la section juste avant (secion "Mise en place de TypeORM").

Quel a été ton parcours dans le livre ?

J'ai suivi la parcours depuis le début pas à pas et mon voyage s'est arrêté à cette requête dans le chapitre Création du contrôleur des utilisateurs... TypeOrm est mis en place 👍

OK je viens de trouver le problème. Tout venait de la variable d'environnement TYPEORM_ENTITIES. Il faut effectuer le changement suivant dans le fichier .env (voir 3b0055e)

- TYPEORM_ENTITIES=src/entities/*.entity.ts,dist/entities/*.entity.js
+ TYPEORM_ENTITIES=dist/src/entities/*.entity.js

Pourquoi faire simple quand on peut faire compliquer...
Merci @madeindjs, c'était sous mes yeux et j'ai rien vu 😂.
Ca marche en effet, je vais pouvoir continuer 👍.
Merci beaucoup pour ton aide 🙏