2010-11-15 4 views
5

Je cherche des options pour se connecter directement - sans serveur web ou middleware - à un serveur PostgreSQL en utilisant JavaScript à partir d'un client de navigateur Web. Sur github, j'ai trouvé trois projets:PostgreSQL sockets à partir de JavaScript (HTML5)

  1. node_postgres
  2. node-postgres
  3. postgres-js

Ils semblent tous être au début, mais au moins un peu de développement actif.

Est-ce qu'ils font tous à peu près la même chose? Est ce qu'ils font même ce que je cherche? Est-ce que quelqu'un a de l'expérience avec l'un d'entre eux qui pourrait recommander un sur les autres?

+1

@Kev - pas tout à fait sûr que c'est une bonne idée.Placer les informations de connexion à la base de données dans le serveur vous oblige à protéger uniquement un seul ordinateur, mais comment protéger les utilisateurs PC ne pas être détourné par quelqu'un? – ajreal

+0

@ajreal, n'est-ce pas vrai, peu importe le nombre de couches? Si vous avez des rôles et des privilèges de base de données bien définis, cela ne devrait pas poser de problème. (Surtout pour une application intranet, disons.) Ne me dites pas que vous assumez la stratégie de compte super-utilisateur unique ... :) – Kev

+0

@Kev - Il ne s'agit pas de privilèges utilisateur par compte, l'idée encourage probablement exposer plus d'informations pour le client. À côté de cela, se demander que le réseau de transport entre client-> base de données est comparable à serveur-> base de données, base de données potentiellement incapable de libérer la ressource plus tôt? – ajreal

Répondre

0

nœud-postgres était inspired by postgres-js et fait à peu près la même chose. Cependant, ils semblent tous deux être leur propre type de middleware, car ils nécessitent node.js, qui est une implémentation JavaScript côté serveur d'un serveur Web. Donc, ils couperaient une couche, mais ne seraient toujours pas la même chose que de se connecter directement au serveur PostgreSQL.

Il existe peut-être un moyen de combiner le code avec des exemples de socket HTML5 pour établir des connexions directement à partir d'un client de navigateur Web.

+0

postgres-js est moins activement maintenu. – Kev

+0

Je pensais faire ce que vous me demandez - avez-vous réussi à établir des liens directement avec postgres? Je pense qu'un postgres accordé pourrait doubler en tant que votre serveur HTTP! :) – markmnl

+0

C'est moins faisable qu'on ne le pense. Sockets et WebSockets sont deux bêtes différentes, apparemment. Voir http://stackoverflow.com/questions/4188825/porting-node-js-server-side-code-to-html5-websockets pour plus d'informations. Je pense que le plus proche possible (à moins que vous ne souhaitiez compiler un serveur web dans postgres ...) soit wsproxy sur le serveur et un node-postgres converti sur le client, en exécutant Apache avec mod_libpq (http: // asmith.id.au/mod_libpq.html) (recompilation pour win32 ou passage à Linux), ou simplement exécution de node.js avec node-postgres. – Kev

0

Si vous êtes intéressé par JavaScript côté CLIENT, comme l'impliquait la question de l'OP, mais que vous n'insistez pas pour posséder le serveur, il existe un service commercial qui peut vous aider.

Le service Rdbhost rend les serveurs PostgreSQL accessibles depuis le JavaScript côté client. Il existe un système de sécurité pour empêcher les requêtes non autorisées, à l'aide d'une liste blanche côté serveur et d'un système de remplissage automatique de liste blanche.

Il utilise de simples requêtes http de style AJAX, fournit une extension jQuery pour faciliter l'interrogation.

Voir https://www.rdbhost.com.

+0

Intéressant, mais je ne pense pas qu'ils vous donnent un accès direct au serveur db. Cela passe toujours par le middleware, AFAICT. – Kev

0

Il n'y a pas de solution sécurisée aujourd'hui. Une des solutions possibles serait htsql: http://htsql.org/

Cependant, là vous utilisez des adresses Web pour interroger, même avec https vos requêtes seront en texte clair!

Vous devriez/pourriez utiliser un petit serveur Web pour gérer les demandes. Alternativement, vous pouvez écrire une application, ou utiliser un serveur local postgres pour gérer la connexion (dans ce cas, vous aurez toujours besoin d'un serveur web).

Le problème est très simple: vos webbrowsers sont limités dans les protocoles pour parler au web, et postgres ne figure pas dans cette liste. En fait, vous ne devriez pas essayer de surmonter ce problème, en utilisant une architecture serveur-client est une très bonne solution. Formatez votre requête avec JS pour la rendre aussi petite que possible, et laissez vos scripts serveur web l'interpréter en requêtes sql fonctionnelles. La réponse peut être analysée en une réponse plus courte, puis un transfert de données sql, et vous avez juste besoin de l'interpréter de votre côté. Puisque vous créerez des interperers de tous les côtés, vous obtiendrez une abstraction plus élevée que dans le cas d'une connexion db directe, et donc de l'indépendance vis-à-vis des moteurs dorsaux que vous utilisez.

Questions connexes