Quoi que je fasse, j'obtiens toujours cette erreur lors de l'exécution de knex.
const knexConnection = knex({ client: 'pg', connection: "postgres://user:password@localhost:5432/db-name", })
Je suis connecté à localhost et je suis sûr que je fais tout correctement. Cette configuration exacte a fonctionné la dernière fois que j'ai ouvert ce projet. J'ai même confirmé que j'étais sur les bonnes versions de npm et de nœuds
"errno": "EAI_AGAIN", "code": "EAI_AGAIN", "syscall": "getaddrinfo", "hostname": "knex", "host": "knex", "port": 3
Mettre le nom d'utilisateur, le mot de passe, etc. dans dbeaver fonctionne très bien. Ce n'est donc pas un problème avec le serveur psql local, ni avec le mot de passe et autres. En regardant la documentation de knex aussi, cela ne semble pas être un problème de syntaxe.
Que se passe-t-il? Comment puis-je résoudre ce problème?
3 Réponses :
Dans l'erreur, vous pouvez voir que vous essayez de rechercher un nom d'hôte appelé Vérifiez également la structure StackTrace où exactement cette erreur provient. P> knex code> et DNS fois sorti. Vérifiez vos câbles. Quelque chose n'est pas configuré comme vous le pensez. P>
Quand Mikael a dit que l'hôte essayant de se connecter était "knex" et non "localhost", j'ai essayé de mettre la variable en tant qu'objet.
const knexConnection = knex({ client: 'pg', connection: {host:host, user:user, password:password, database:database, port:port}, })
et avec les mêmes valeurs, ça a marché. Donc, je ne sais pas pourquoi l'URL n'a pas fonctionné. J'espère que c'était juste cet incident, et que cela n'arrivera pas avec mon serveur postgresql réel.
marquera que c'est la bonne réponse demain lorsque stackoverflow me le permettra
À mon humble avis, étant donné que tous les autres paramètres sont corrects, votre mot de passe / utilisateur contient probablement des caractères spéciaux qui ont cassé l'analyseur d'URL, puis knex essaie de se connecter à une URL qui n'existe pas .
Vous devriez essayer avec un autre utilisateur ou changer le mot de passe de l'utilisateur en quelque chose sans caractères spéciaux. Vous pouvez voir cette question connexe
Cela expliquerait même pourquoi votre connexion utilisant un objet de configuration fonctionne, mais pas avec l'URI.
c'est peut-être ce que c'était. Je viens de changer le mot de passe et les serveurs psql locaux en raison du redémarrage de Linux. Quoi qu'il en soit, le placer dans un objet avec exactement les mêmes variables (importées d'un .env) a résolu le problème.
Il s'agit d'une erreur DNS lors de la tentative de connexion à votre serveur PostgreSQL
Comment puis-je avoir une erreur DNS avec localhost?