2010-11-15 12 views
5

Czekam na opcje bezpośredniego połączenia - bez serwera WWW lub oprogramowania pośredniego - z serwerem PostgreSQL przy użyciu skryptu JavaScript z klienta przeglądarki internetowej. Na github, znalazłem trzy projekty:Gniazda PostgreSQL z JavaScript (HTML5)

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

Wszyscy wydają się być na początku, ale przynajmniej nieco aktywny rozwój.

Czy wszyscy robią mniej więcej to samo? Czy robią to, czego szukam? Czy ktokolwiek ma doświadczenie z którymś z nich, który mógłby polecić kogoś innym?

+1

@Kev - nie jestem pewien czy to dobry pomysł.Umieszczanie informacji o połączeniu z bazą danych na serwerze wymaga ochrony tylko jednego komputera, ale jak chronić użytkowników PC, aby NIE zostali przez kogoś przejęci? – ajreal

+0

@ajreal, czy to nie prawda, bez względu na to, ile warstw istnieje? Jeśli masz dobrze zdefiniowane role i uprawnienia do bazy danych, nie powinno to stanowić problemu. (Szczególnie w przypadku aplikacji intranetowej, powiedzmy.) Nie mów mi, że zakładasz strategię jednego superużytkownika-konta ... :) – Kev

+0

@Kev - Nie chodzi o przywileje użytkownika na konto, pomysł prawdopodobnie zachęci do ujawnienia więcej informacji po stronie klienta. Poza tym, zastanawiasz się, w jaki sposób podróż w sieci między bazą klienta-> jest porównywalna do serwera-> bazy danych, potencjalnie baza danych nie może szybciej wydać zasobu? – ajreal

Odpowiedz

0

węzeł-postgres był inspired by postgres-js i robi z grubsza to samo.

Jednak oba wydają się być ich własnym oprogramowaniem pośredniczącym, ponieważ wymagają pliku node.js, który jest implementacją serwera WWW po stronie serwera. Więc wycięliby warstwę, ale nadal nie byłyby tożsame z bezpośrednim łączeniem się z serwerem PostgreSQL.

Może istnieć sposób na połączenie kodu z niektórymi przykładami gniazd HTML5, aby nawiązywać połączenia bezpośrednio z klienta przeglądarki internetowej.

+0

Postgres-js jest mniej aktywnie utrzymywany. – Kev

+0

Myślałem o zrobieniu tego, o co prosisz - czy udało ci się nawiązać połączenia bezpośrednio z postgres? Myślę, że dostrojony postgres mógłby się podwoić jako twój serwer HTTP! :) – markmnl

+0

To mniej wykonalne, niż nam się wydaje. Gniazda i WebSockets to najwyraźniej dwie różne bestie. Zobacz http://stackoverflow.com/questions/4188825/porting-node-js-server-side-code-to-html5-websockets, aby uzyskać więcej informacji. Myślę, że prawdopodobnie najbliżej moglibyśmy uzyskać (o ile nie chcemy w jakiś sposób skompilować serwera WWW w postgresie ...) jest albo uruchomienie wsproxy na serwerze i przekonwertowane node-postgres na kliencie, uruchomienie Apache'a z mod_libpq (http: // asmith.id.au/mod_libpq.html) (rekompilacja dla win32 lub przejście na Linux) lub po prostu uruchomienie node.js z node-postgres. – Kev

0

Jeśli interesuje cię JavaScript strony JavaScript, jak sugeruje to OP, ale nie nalegasz na posiadanie serwera, istnieje komercyjna usługa, która może ci pomóc.

Usługa Rdbhost udostępnia serwery PostgreSQL z poziomu JavaScript po stronie klienta. Istnieje system zabezpieczeń, który zapobiega nieautoryzowanym kwerendom za pomocą białej listy na serwerze i zautomatyzowanego systemu wypełniania na białej liście.

Używa zwykłych starych żądań http w stylu AJAX, udostępnia rozszerzenie jQuery, aby ułatwić wyszukiwanie.

Zobacz https://www.rdbhost.com.

+0

Interesujące, ale nie sądzę, że dają one bezpośredni dostęp do serwera db. Wciąż trwa przez oprogramowanie pośredniczące, AFAICT. – Kev

0

Dzisiaj nie ma bezpiecznego rozwiązania. Jednym z możliwych rozwiązań będzie htsql: http://htsql.org/

Jednak używasz adresów internetowych do zapytania, nawet jeśli https Twoje zapytania będą czystym tekstem!

Powinieneś/powinnaś używać małego serwera WWW do obsługi żądań. Alternatywnie możesz napisać aplikację lub użyć lokalnego serwera postgres do obsługi połączenia (w tym przypadku nadal będziesz potrzebować jakiegoś serwera).

Problem jest bardzo prosty: twoje przeglądarki internetowe mają ograniczone protokoły do ​​komunikowania się z siecią, a postgres nie znajduje się na tej liście. W rzeczywistości nie powinieneś próbować przezwyciężyć tego problemu, korzystanie z architektury serwer-klient jest bardzo dobrym rozwiązaniem. Sformatuj swoją prośbę za pomocą JS, aby była tak mała, jak to możliwe, i niech twoje skrypty serwera internetowego zinterpretują ją w funkcjonalne żądania sql. Odpowiedź może zostać przetworzona na krótszą odpowiedź, a następnie przesłanie danych w formacie sql i musisz ją zinterpretować po swojej stronie. Ponieważ stworzysz interperers ze wszystkich stron, uzyskasz wyższą abstrakcję niż w przypadku bezpośredniego połączenia db, a tym samym niezależność w stosunku do silników backendów, których używasz.