Quelle est la bonne façon d'utiliser les node.js postgresql module?
Je suis en train d'écrire un node.js application sur Heroku et à l'aide de la pg module. Je ne peux pas trouver la "bonne" façon d'obtenir un objet client pour chaque requête que j'ai besoin d'interroger la base de données.
La documentation utilise un code comme ceci:
pg.connect(conString, function(err, client) {
//Use the client to do things here
});
Mais sûrement, vous n'avez pas besoin d'appeler pg.connect
à l'intérieur de chaque fonction qui utilise la base de données de droit? J'ai vu autre code qui fait cela:
var conString = process.env.DATABASE_URL || "tcp://postgres:1234@localhost/postgres";
var client = new pg.Client(conString);
client.connect();
//client is a global so you can use it anywhere now
Je me penche vers la seconde option, car je crois que le libre instance de base de données pour Heroku est limité à une connexion de toute façon, mais y at-il des inconvénients à le faire de cette façon? Dois-je vérifier si mon objet client est toujours connecté à chaque fois avant que je l'utiliser?
Vous devez vous connecter pour publier un commentaire.
Je suis l'auteur de nœud-postgres. Tout d'abord, je m'excuse de la documentation n'a pas le droit d'option claire: c'est de ma faute. Je vais essayer de l'améliorer. J'ai écrit un Résumé tout à l'heure d'expliquer cela parce la conversation a grandi trop long pour Twitter.
Un très utile, c'est de centraliser tous les accès à votre base de données dans votre application dans un seul fichier. Ne pas jeter sur
pg.connect
appels ou de nouveaux clients à travers. Avoir un fichier commedb.js
qui ressemble à quelque chose comme ceci:De cette façon, vous pouvez modifier votre mise en œuvre de
pg.connect
un pool de clients ou de quoi que ce soit et n'ont qu'à changer les choses dans un seul endroit.Ont un look à la nœud-pg-module d'interrogation qui fait juste cela.
pg-query
utilise le client de mise en commun? Si non, avez-vous un exemple comment écrire undb.js
lorsque vous mettez votre demande à l'intérieur depool.connect((err, client, done) => {});
? Lemax number of clients in the pool
peut être très grand nombre, comme les 10000? Et que veut dire exactement? Exactement au même moment que la base de données ne peut pas gérer plus de visiteurs que ce nombre?module.exports = { query: function(text, values, cb) { pg.connect(function(err, client, done) { if (err) { cb(null, values); } client.query(text, values, function(err, result) { done(); cb(err, result); }) }); } }
en appelant cb(null, valeurs) d'une erreur de bloc, les sockets sont augmentés dans le serveur unix. Je suis la vérification des sockets par cette commande ls -ltr /proc/chat /chemin de la pid/fd/ | grep socket | wc-lJe suis l'auteur de pg-promesse, ce qui simplifie l'utilisation de nœud-postgres via promesses.
Il aborde les questions sur la bonne façon de se connecter et se déconnecter de la base de données, en utilisant un pool de connexion mis en œuvre par nœud-postgres, parmi d'autres choses, comme les transactions automatisées.
Une demande individuelle dans pg-promesse se résume à tout ce qui est pertinent à votre entreprise de logique:
c'est à dire vous n'avez pas besoin de traiter avec connexion logique lors de l'exécution de requêtes, parce que vous avez configuré la connexion qu'une seule fois, à l'échelle mondiale, comme ceci:
Vous pouvez trouver de nombreux autres exemples dans Apprendre par l'Exemple tutoriel, ou sur le projet de la page d'accueil.
pg
cela est spécifié parpg.defaults.ssl = true;
. Comment faites-vous cela danspg-promise
?pgp.pg.defaults.ssl = true;
Comme vous pouvez le voir à partir de la la documentation les deux options sont valables, afin de choisir celui que vous préférez. Comme vous, j'irais avec le deuxième choix.
Il est préférable de créer un pg de la piscine à l'échelle mondiale et à chaque fois vous avez besoin de faire un db opération utiliser le client et le relâcher à la piscine. Une fois que tous les db opérations sont effectuées à la fin de la piscine à l'aide de
pool.end()
Exemple de code -
Pour plus de détails, vous pouvez vous référer à mon post de blog -Source
J'étais intéressé par un très simple gestionnaire pour cela j'ai donc fait mon propre, sans le rendre plus compliqué. Je suis pas d'illusions que c'est super basique, mais il pourrait aider certaines personnes à obtenir commencé. Fondamentalement, il se connecte, exécute des requêtes et gère les erreurs pour vous.
Alors vous devez utiliser en appelant cela de cette façon:
node-postgres
page fait mieux que cela.Voici comment je le fais, sorte de "tous les de l'approche ci-dessus"