Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/12/2021, à 15:39

caranille

[Résolu] Soucis NodeJS

Bonjour,

Je me permets d'écrire ici car j'écrit un programme en NodeJS pour la gestion de nos chère animaux à quatre pattes, les cochons d'inde.

J'ai utilisé le générateur d'Express et j'ai fait mes routes, models, et views.

Sauf qu'actuellement dans chaque route je suis obligé de réinitialiser toutes mes variables à chaque fichier de route

Voici le github : https://github.com/caranille/Masha

Et une route au hasard :
https://github.com/caranille/Masha/blob … account.js

Et le fichier de base qui se lance au lancement du logiciel :
https://github.com/caranille/Masha/blob/main/app.js

En gros je suis obligé de redéclarer express, pg (PostGreSQL) ainsi que de lancer la connexion à la base de donnée... à savoir ce code :

var express = require('express');
var router = express.Router();
var { Client } = require('pg');
var fs = require('fs');
var ddb = fs.readFileSync('./ddb.json');
ddbJSON = JSON.parse(ddb);

//PostGreSQL configuration
var client = new Client(
{
    user: ddbJSON.user,
    host: ddbJSON.host,
    database: ddbJSON.database,
    password: ddbJSON.password,
    port: ddbJSON.port,
})
client.connect();

var account = require('../models/account');

Si vous avez une idée comment améliorer ça ^^

Bien cordialement,

Dernière modification par caranille (Le 16/12/2021, à 18:11)

Hors ligne

#2 Le 15/12/2021, à 15:55

iznobe

Re : [Résolu] Soucis NodeJS

Bonjour , je ne connais pas les langages que tu utilises , mais la logique veut qu ' on cree un fichier de connecion a la BDD specifique pour cette action , tu pourrais le nommer par exemple " connection_bdd " .
Ensuite , on utilise generalement une fonction " include " qui prend en parametre le fichier en question et qui l ' ajoute donc a toutes les pages qui ont besoin de se connecter a la BDD , genre :
include ("connection_bdd") .

j ' ai mis evidemment n ' importequoi , car je ne connais pas la syntaxe ni la fonction a utiliser , c ' est juste un exemple basique .

Dernière modification par iznobe (Le 15/12/2021, à 15:57)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#3 Le 15/12/2021, à 18:56

caranille

Re : [Résolu] Soucis NodeJS

Bonjour,

Je faisais du PHP avant et c'et ce que je faisais mais sur nodejs on peux faire un require pour importer des fonctions d'un autre fichier mais pas pour éviter de saisir ces lignes à chaques fois ^^

Bien cordialement,

Hors ligne

#4 Le 15/12/2021, à 20:00

soshy

Re : [Résolu] Soucis NodeJS

Salut,

alors oui, faut pas faire comme ça. En l'état, tu ouvres une connexion BDD par route de ton appli, c'est pas super tongue

Il faut utiliser app.locals et res.app

En gros il faudrait par exemple rajouter à ton fichier app.js

app.locals.dbClient = client;

et dans tes routes ça donnerait un truc du genre

//GET /account
router.get('/', (req, res, next) => {
    const dbClient = res.app.locals.dbClient; 
    // se servir de dbClient pour faire les requêtes sql qui vont bien...

    res.render('account/index.ejs', {account});
})

Hors ligne

#5 Le 15/12/2021, à 20:13

caranille

Re : [Résolu] Soucis NodeJS

Bonjour,

Je viens de le faire et ça fonctionne merci encore yikes

Et laisser ça en tête de chaque route ça gène pas :

var express = require('express');
var router = express.Router();
var account = require('../models/account');

Bien cordialement,

Hors ligne

#6 Le 15/12/2021, à 20:23

soshy

Re : [Résolu] Soucis NodeJS

carnille a écrit :

sur nodejs on peux faire un require pour importer des fonctions d'un autre fichier mais pas pour éviter de saisir ces lignes à chaques fois ^^

J'ajouterai même que c'est tout à fait possible

Exemple :

// fichier bdd.js
const { Client } = require('pg');
const fs = require('fs');


const ddb = fs.readFileSync('./ddb.json');
ddbJSON = JSON.parse(ddb);

//PostGreSQL configuration
var client = new Client(
{
    user: ddbJSON.user,
    host: ddbJSON.host,
    database: ddbJSON.database,
    password: ddbJSON.password,
    port: ddbJSON.port,
})
client.connect();
module.exports = client;
// un-autre-fichier.js
const dbClient = require('./bdd')
// ici on a notre client de bdd !

Pour finir quelques considérations générales...
On va éviter d'utiliser var et préférer let ou const. Il y a moyen de faire des trucs vraiment "bizarre" avec var quand on connait pas.
Plutot que de lire un fichier json puis de le parse on peut le require directement (mais comme require ça garde un cache de tout ce qui a été require, si tu fais une modif sur le fichier et que le code refait un require pour rafraichir, il va lire le cache et pas le fichier modifié).

Du coup, l'exemple bdd.js plus haut peut être réduit à

const { Client } = require('pg');

//PostGreSQL configuration
const client = new Client(require('./ddb.json'));
client.connect();
module.exports = client;




carnille a écrit :

Et laisser ça en tête de chaque route ça gène pas :
var express = require('express');
var router = express.Router();
var account = require('../models/account');

Non, en gros le require va récupérer une référence vers ce que le module exporte (en général un objet avec plein de trucs dedans)
Là, par exemple, tu récupères l'objet exporté par le module "express". Au premier require ça exécute le fichier js, et ça garde en cache le contenu de ce qui est exporté (comme mon exemple plus haut).
Ensuite, l'objet express il a une méthode "Router" que tu exécutes et qui te retourne un truc (en l'occurrence, un objet router). A la limite tu pourrai faire

const router = require('express').Router(); 

Tu gagnes une ligne, mais ça change vraiment pas grand chose au final.

Dernière modification par soshy (Le 15/12/2021, à 21:26)

Hors ligne

#7 Le 16/12/2021, à 18:10

caranille

Re : [Résolu] Soucis NodeJS

Bonjour,

Merci énormément de ton aide, je commence à saisit la logique en suivant tes liens et je vais donc pouvoir bien commencer sans faire un bon code spaghetti pour plus tard tongue

Bien cordialement,

Hors ligne