2015-08-11 30 views
23

Schritte mit nodej.s Arbeitsrequire ist nicht definiert? node.js

In meiner app/js-Datei, ich etwas tue, wie diese

app.js

var http = require('http'); 

http.createServer(function (request, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    response.end('Am I really running a server?!'); 
}).listen(8080, '127.0.0.1'); 

console.log('running server!'); 

Wenn ich in meinem Terminal und führen node app.js

Die Konsole ausspuckt 'running server!'

Aber in meinem Browser bekomme ich, Uncaught ReferenceError: require is not defined

Kann mir jemand erklären, warum im Terminal funktioniert es richtig, aber im Browser, tut es nicht?

Ich benutze npm HTTP-Server, um meine Seite zu bedienen.

+4

Sie ... diese js-Datei im Browser ausführen? Du solltest das nicht tun ... – david

Antwort

20

Im Terminal führen Sie die Knotenanwendung aus und es wird Ihr Skript ausgeführt. Dies ist eine sehr andere Ausführungsumgebung als das direkte Ausführen des Skripts im Browser. Während die JavaScript-Sprache weitgehend identisch ist (beide V8, wenn Sie den Chrome-Browser ausführen), ist der Rest der Ausführungsumgebung wie die verfügbaren Bibliotheken nicht identisch.

node.js ist eine serverseitige JavaScript-Ausführungsumgebung, die die V8-Javascript-Engine mit einer Reihe serverseitiger Bibliotheken kombiniert. require() ist eine solche Funktion, die node.js der Umgebung hinzufügt. Wenn Sie also Knoten im Terminal ausführen, führen Sie eine Umgebung aus, die require() enthält.

require() ist keine Funktion, die in den Browser integriert ist. Das ist eine Besonderheit von node.js, nicht eines Browsers. Wenn Sie also versuchen, das Skript vom Browser ausführen zu lassen, verfügt es nicht über require().

Es gibt Möglichkeiten, einige Formen von node.js-Code in einem Browser auszuführen (aber nicht alle). Zum Beispiel können Sie Browser-Ersatz für require() erhalten, die ähnlich (wenn auch nicht identisch) funktionieren.

Sie werden jedoch keinen Webserver in Ihrem Browser ausführen, da dies nicht die Aufgabe des Browsers ist.


Sie können in browserify interessiert sein, die Sie require()-Anweisungen verwenden Knoten-style-Module in einem Browser können.

35

Node.JS ist eine serverseitige Technologie, keine Browser-Technologie. Daher funktionieren knotenspezifische Aufrufe wie require() nicht im Browser.

Siehe browserify oder webpack, wenn Sie browserspezifische Module von Node aus bedienen möchten.

Verwandte Themen