Ich versuche, Javascript zum Lesen / Schreiben in eine PostgreSQL-Datenbank zu bringen. Ich habe dieses Projekt auf Github gefunden. Ich konnte den folgenden Beispielcode für die Ausführung im Knoten erhalten.
var pg = require('pg'); //native libpq bindings = `var pg = require('pg').native`
var conString = "tcp://postgres:1234@localhost/postgres";
var client = new pg.Client(conString);
client.connect();
//queries are queued and executed one after another once the connection becomes available
client.query("CREATE TEMP TABLE beatles(name varchar(10), height integer, birthday timestamptz)");
client.query("INSERT INTO beatles(name, height, birthday) values($1, $2, $3)", ['Ringo', 67, new Date(1945, 11, 2)]);
client.query("INSERT INTO beatles(name, height, birthday) values($1, $2, $3)", ['John', 68, new Date(1944, 10, 13)]);
//queries can be executed either via text/parameter values passed as individual arguments
//or by passing an options object containing text, (optional) parameter values, and (optional) query name
client.query({
name: 'insert beatle',
text: "INSERT INTO beatles(name, height, birthday) values($1, $2, $3)",
values: ['George', 70, new Date(1946, 02, 14)]
});
//subsequent queries with the same name will be executed without re-parsing the query plan by postgres
client.query({
name: 'insert beatle',
values: ['Paul', 63, new Date(1945, 04, 03)]
});
var query = client.query("SELECT * FROM beatles WHERE name = $1", ['John']);
//can stream row results back 1 at a time
query.on('row', function(row) {
console.log(row);
console.log("Beatle name: %s", row.name); //Beatle name: John
console.log("Beatle birth year: %d", row.birthday.getYear()); //dates are returned as javascript dates
console.log("Beatle height: %d' %d\"", Math.floor(row.height/12), row.height%12); //integers are returned as javascript ints
});
//fired after last row is emitted
query.on('end', function() {
client.end();
});
Als nächstes habe ich versucht, es auf einer Webseite zum Laufen zu bringen, aber es schien nichts zu passieren. Ich habe in der Javascript-Konsole nachgesehen und es steht nur "erforderlich nicht definiert".
Also, was ist das "erfordern"? Warum funktioniert es im Knoten, aber nicht auf einer Webseite?
Bevor ich es in Node zum Laufen bringen konnte, musste ich es auch tun npm install pg
. Um was geht es? Ich habe im Verzeichnis gesucht und keine Datei gefunden. Wo hat es hingelegt und wie findet Javascript es?
javascript
database
postgresql
node.js
Neuromant
quelle
quelle
Antworten:
require()
ist nicht Teil der Standard-JavaScript-API. In Node.js handelt es sich jedoch um eine integrierte Funktion mit einem besonderen Zweck: dem Laden von Modulen .Module sind eine Möglichkeit, eine Anwendung in separate Dateien aufzuteilen, anstatt Ihre gesamte Anwendung in einer Datei zu haben. Dieses Konzept ist auch in anderen Sprachen mit geringfügigen Unterschieden in Syntax und Verhalten vorhanden, wie z. B. Cs
include
, Pythonsimport
usw.Ein großer Unterschied zwischen Node.js-Modulen und Browser-JavaScript besteht darin, wie auf den Code eines Skripts über den Code eines anderen Skripts zugegriffen wird.
In Browser-JavaScript werden Skripte über das
<script>
Element hinzugefügt . Bei der Ausführung haben alle direkten Zugriff auf den globalen Bereich, einen "gemeinsam genutzten Bereich" zwischen allen Skripten. Jedes Skript kann alles im globalen Bereich frei definieren / ändern / entfernen / aufrufen.In Node.js hat jedes Modul seinen eigenen Bereich. Ein Modul kann nicht direkt auf Dinge zugreifen, die in einem anderen Modul definiert sind, es sei denn, es macht sie verfügbar. Um Dinge aus einem Modul verfügbar zu machen, müssen sie
exports
oder zugewiesen werdenmodule.exports
. Damit ein Modul auf dasexports
oder eines anderen Moduls zugreifen kannmodule.exports
, muss es verwendet werdenrequire()
.Lädt in Ihren Code
var pg = require('pg');
diepg
Modul, einen PostgreSQL-Client für Node.js. Auf diese Weise kann Ihr Code über diepg
Variable auf die Funktionen der APIs des PostgreSQL-Clients zugreifen .require()
,module.exports
undexports
sind APIs ein Modulsystem , das spezifisch für Node.js. ist Browser implementieren dieses Modulsystem nicht.NPM ist ein Paket-Repository-Dienst, der veröffentlichte JavaScript-Module hostet.
npm install
ist ein Befehl, mit dem Sie Pakete aus ihrem Repository herunterladen können.Die npm-CLI legt alle heruntergeladenen Module in einem
node_modules
Verzeichnis ab, in dem Sie ausgeführt habennpm install
. Node.js enthält eine sehr detaillierte Dokumentation darüber, wie Module andere Module finden , einschließlich der Suche nach einemnode_modules
Verzeichnis.quelle
require
Unterstützung ?include/require[_once]
( php.net link ), nichtuse
, was ein Aliasing- Schlüsselwort ist.Okay, beginnen wir also mit der Unterscheidung zwischen Javascript in einem Webbrowser und Javascript auf einem Server (CommonJS und Node).
Javascript ist eine Sprache, die traditionell auf einen Webbrowser mit einem begrenzten globalen Kontext beschränkt ist, der hauptsächlich durch das sogenannte DOM-Level 0 (Document Object Model) (die Netscape Navigator-Javascript-API) definiert wird.
Serverseitiges Javascript beseitigt diese Einschränkung und ermöglicht es Javascript, verschiedene Teile des nativen Codes (wie die Postgres-Bibliothek) aufzurufen und Sockets zu öffnen.
Jetzt
require()
ist ein spezieller Funktionsaufruf als Teil der CommonJS-Spezifikation definiert. Im Knoten werden Bibliotheken und Module im Knotensuchpfad aufgelöst, der jetzt normalerweise als definiert istnode_modules
im selben Verzeichnis (oder im Verzeichnis der aufgerufenen Javascript-Datei) oder im systemweiten Suchpfad definiert ist.Um den Rest Ihrer Frage zu beantworten, müssen wir einen Proxy zwischen dem im Browser ausgeführten Code und dem Datenbankserver verwenden.
Da es sich um Node handelt und Sie bereits wissen, wie eine Abfrage von dort aus ausgeführt wird, ist es sinnvoll, Node als Proxy zu verwenden.
Als einfaches Beispiel erstellen wir eine URL, die einige Fakten über einen Beatle mit einem Namen als JSON zurückgibt.
quelle
createServer
ist verwirrend ... es deutet darauf hin, dass ich jederzeit Server erstellen kann, wann immer ich will ... im Gegensatz zu meinem WAMP-Paradigma: Vor ungefähr 5 Jahren habe ich installiert (z. B. "erstellt" ') ein Server auf meinem Windows XP-Laptop, und ich habe seitdem nie mehr einen anderen Server' erstellt '... jetzt kann ich plötzlich einfach anfangen, Server zu erstellen ... es ist verwirrend ..C:\Program Files\nodejs\
einer Datei oder einem Verzeichnis mit dem Namen sucheexpress
, bekomme ich keine Übereinstimmung ... also woher kommt es ...npm
. Weitere Informationen finden Sie hier: expressjs.comEs wird zum Laden von Modulen verwendet. Verwenden wir ein einfaches Beispiel.
In Datei
circle_object.js
:Wir können dies verwenden über
require
, wie:Die
require()
Methode wird zum Laden und Zwischenspeichern von JavaScript-Modulen verwendet. Wenn Sie also ein lokales, relatives JavaScript-Modul in eine Node.js-Anwendung laden möchten, können Sie einfach das verwendenrequire()
Methode verwenden.Beispiel:
quelle
Ich bemerkte, dass die anderen Antworten zwar erklärten, was erforderlich ist und dass sie zum Laden von Modulen in Node verwendet werden, sie jedoch keine vollständige Antwort zum Laden von Knotenmodulen gaben, wenn sie im Browser arbeiteten.
Das ist ganz einfach. Installieren Sie Ihr Modul mit npm, wie Sie es beschreiben, und das Modul selbst befindet sich in einem Ordner, der normalerweise als node_modules bezeichnet wird.
Der einfachste Weg, es in Ihre App zu laden, besteht darin, es aus Ihrem HTML-Code mit einem Skript-Tag zu referenzieren, das auf dieses Verzeichnis verweist. Wenn sich Ihr node_modules-Verzeichnis im Stammverzeichnis des Projekts auf derselben Ebene wie Ihre index.html befindet, schreiben Sie dies in Ihre index.html:
Das gesamte Skript wird nun in die Seite geladen, sodass Sie direkt auf die Variablen und Methoden zugreifen können.
Es gibt andere Ansätze, die in größeren Projekten häufiger verwendet werden, z. B. ein Modullader wie require.js . Von den beiden habe ich Require selbst nicht verwendet, aber ich denke, es wird von vielen Menschen als der richtige Weg angesehen.
quelle
<name of module>
? Hier ist meine Verzeichnisstruktur. Stammordner istxyz
.xyz/index.html
verweist auf diexyz/js/scripts.js
Verwendungscript tag
.xyz/js/scripts.js
hat Coderequire('./module1.js');require('./module2.js');
.module1.js
Ichmodule2.js
bin auch imxyz/js
Ordner. Wie stelle ich nun denscripts.js
Browser zur Verfügung?Sie wissen, wie Sie beim Ausführen von JavaScript im Browser auf Variablen wie "Fenster" oder Mathematik zugreifen können? Sie müssen diese Variablen nicht deklarieren, sie wurden so geschrieben, dass Sie sie verwenden können, wann immer Sie möchten.
Wenn Sie eine Datei in der Node.js-Umgebung ausführen, können Sie eine Variable verwenden. Es heißt "Modul". Es ist ein Objekt. Es hat eine Eigenschaft namens "Exporte". Und es funktioniert so:
In eine Datei, die wir example.js nennen, schreiben Sie:
example.js
Nun möchten Sie diese Zeichenfolge "etwas Code" in einer anderen Datei.
Wir werden die andere Datei otherFile.js benennen
In diese Datei schreiben Sie:
otherFile.js
Diese require () - Anweisung geht zu der Datei, die Sie darin abgelegt haben, und findet alle Daten, die in der Eigenschaft module.exports gespeichert sind. Der Teil let str = ... Ihres Codes bedeutet, dass alles, was eine Anweisung zurückgibt, in der Variablen str gespeichert wird.
In diesem Beispiel ist das Endergebnis, dass Sie in otherFile.js jetzt Folgendes haben:
let string = "irgendein Code";
let str = ('./example.js').module.exports
Hinweis:
Der Dateiname, der in die require-Anweisung geschrieben wird: Wenn es sich um eine lokale Datei handelt, sollte dies der Dateipfad zu example.js sein. Außerdem wird die Erweiterung .js standardmäßig hinzugefügt, sodass ich sie nicht schreiben musste.
Ähnliches tun Sie, wenn Sie node.js-Bibliotheken wie Express benötigen. In der Datei express.js befindet sich ein Objekt mit dem Namen 'module' und einer Eigenschaft mit dem Namen 'export'.
Es sieht also ungefähr so aus, unter der Haube (ich bin ein bisschen ein Anfänger, daher sind einige dieser Details möglicherweise nicht genau, aber es soll das Konzept zeigen:
express.js
Wenn Sie ein Modul benötigen, sieht es folgendermaßen aus: const moduleName = require ("Modulname");
Wenn Sie eine lokale Datei benötigen, sieht dies folgendermaßen aus: const localFile = require ("./ path / to / local-file");
(Beachten Sie die ./ am Anfang des Dateinamens)
Beachten Sie auch, dass der Export standardmäßig ein Objekt ist. Beispiel: module.exports = {} Sie können also module.exports.myfunction = () => {} schreiben, bevor Sie dem module.exports einen Wert zuweisen. Sie können das Objekt aber auch ersetzen, indem Sie module.exports = "Ich bin kein Objekt mehr." Schreiben.
quelle
Zwei Varianten von module.exports / erfordern:
(siehe hier )
Flavour 1
Exportdatei (misc.js):
andere Datei:
Flavour 2-
Exportdatei (user.js):
andere Datei:
quelle