2010-11-15 2 views
5

Sto esaminando le opzioni per connettersi direttamente, senza un server Web o middleware, a un server PostgreSQL utilizzando JavaScript da un client browser Web. Su GitHub, ho trovato tre progetti:Socket PostgreSQL da JavaScript (HTML5)

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

Hanno tutti sembrano essere nei primi mesi, ma almeno un po 'di sviluppo attivo.

fanno tutti all'incirca la stessa cosa? È quello che fanno anche quello che sto cercando? Qualcuno ha esperienza con qualcuno di loro che potrebbe raccomandare uno rispetto agli altri?

+1

@ Kev - non sono sicuro che sia una buona idea.Inserire le informazioni di connessione al database nel server richiede di proteggere solo il singolo computer, ma come proteggere il PC dell'utente affinché non venga dirottato da qualcuno? – ajreal

+0

@ajreal, non è vero indipendentemente da quanti livelli ci sono? Se si dispone di ruoli e privilegi di database ben definiti, non dovrebbe essere un problema. (Soprattutto per un'app intranet, per esempio.) Non dirmi che stai assumendo la strategia dell'account single-superuser ... :) – Kev

+0

@Kev - Non si tratta di privilegi utente-per-account, l'idea probabilmente incoraggerà l'esposizione maggiori informazioni al lato client. Oltre a ciò, chiedendo che la rete viaggi tra client-> database è paragonabile a server-> database, potenzialmente il database non è in grado di rilasciare le risorse prima? – ajreal

risposta

0

node-postgres era inspired by postgres-js e fa all'incirca la stessa cosa.

Tuttavia, entrambi sembrano essere il proprio tipo di middleware, poiché richiedono node.js, ovvero un'implementazione JavaScript di un server Web sul lato server. Quindi eliminerebbero un livello, ma non sarebbero la stessa cosa che collegarsi direttamente al server PostgreSQL.

Potrebbe esserci un modo per combinare il codice in essi con alcuni esempi di socket HTML5, tuttavia, per effettuare connessioni direttamente da un client di browser web.

+0

postgres-js viene mantenuto meno attivamente. – Kev

+0

Stavo pensando di fare quello che stai chiedendo: sei riuscito a creare connessioni direttamente con Postgres? Penso che un postgres sintonizzato possa raddoppiare come il tuo server HTTP! :) – markmnl

+0

È meno fattibile di quanto pensiamo. Socket e WebSockets sono due animali diversi, a quanto pare. Vedi http://stackoverflow.com/questions/4188825/porting-node-js-server-side-code-to-html5-websockets per ulteriori informazioni. Penso che probabilmente il più vicino che potremmo ottenere (a meno che tu non voglia compilare un server web in postgres in qualche modo ...) sia eseguendo wsproxy sul server e un nodo convertito-postgres sul client, eseguendo Apache con mod_libpq (http: // asmith.id.au/mod_libpq.html) (sia ricompilando per win32 o passando a Linux), o semplicemente eseguendo node.js con node-postgres. – Kev

0

Se sei interessato al lato JavaScript CLIENT, come implicito nella domanda dell'OP, ma non insisti nel possedere il server, esiste un servizio commerciale che può aiutarti.

Il servizio Rdbhost rende i server PostgreSQL accessibili da JavaScript sul lato client. Esiste un sistema di sicurezza per prevenire le interrogazioni non autorizzate, utilizzando una white-list sul lato server e un sistema di popolamento automatico delle liste bianche.

Utilizza semplici richieste HTTP in stile AJAX vecchio, fornisce un'estensione jQuery per facilitare l'interrogazione.

Vedere https://www.rdbhost.com.

+0

Interessante, ma non credo che ti stiano dando accesso diretto al server db. Passa ancora attraverso il middleware, AFAICT. – Kev

0

Non esiste una soluzione sicura oggi. Una delle possibili soluzioni potrebbe essere htsql: http://htsql.org/

Tuttavia, lì si utilizzano gli indirizzi Web per la query, anche con https le query saranno scritte in modo semplice!

Si dovrebbe/potrebbe utilizzare un piccolo server web per gestire le richieste. In alternativa è possibile scrivere un'app o utilizzare un server Postgres locale per gestire la connessione (in questo caso sarà comunque necessario un qualche tipo di server web).

Il problema è molto semplice: i tuoi browser sono limitati nei protocolli per parlare con il web e Postgres non è in questo elenco. In realtà non si dovrebbe cercare di superare questo problema, l'utilizzo di un'architettura server-client è un'ottima soluzione. Formatta la tua richiesta con JS per renderla il più piccola possibile e lascia che i tuoi script del web server lo interpretino in richieste sql funzionali. La risposta può essere analizzata in una risposta più breve, quindi in un trasferimento di dati SQL, e devi solo interpretarla dalla tua parte. Dal momento che creerai interperer su tutti i lati, otterrai un'astrazione più elevata quindi in caso di connessione diretta in db e quindi l'indipendenza verso i motori di back-end che utilizzi.