"Das erste Argument muss eine Zeichenfolge oder ein Puffer sein" - Fehler beim Befolgen des Node.js-Tutorials von w3schools
Ich wollte lernen, wie ich mit Node.js meinen eigenen Webserver einrichte. Ich folgte dem Node.js-Tutorial von w3schools und es lief gut, bis ich zum Teil "Node.js File System" kam. (Ich weiß, gleich zu Beginn des Tutorials.)
Die Aufgabe besteht darin, zwei Dateien zu erstellen.
- demofile1.html
<html> <body> <h1>My Header</h1> <p>My paragraph.</p> </body> </html>
- und demo_readfile.js :
var http = require('http'); var fs = require('fs'); http.createServer(function (req, res) { fs.readFile('demofile1.html', function(err, data) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(data); res.end(); }); }).listen(8080);
Einfach genug, oder? Die .js-Datei soll lesen, was in der .html-Datei enthalten ist, und sie in Ihrem Browser anzeigen.
In den vorherigen Beispielen desselben Tutorials habe ich nur die Datei Whatever.js mit geladen node whatever.js
und localhost:8080
in meinem Browser verwendet, um das Skript ohne Probleme auszuführen. In diesem Fall gibt Chrome jedoch nur die Meldung "Diese Site kann nicht erreicht werden (ERR_CONNECTION_REFUSED). "und es stürzt node.js mit folgendem Fehler ab:
_http_outgoing.js:642
throw new TypeError('First argument must be a string or Buffer');
^
TypeError: First argument must be a string or Buffer
at write_ (_http_outgoing.js:642:11)
at ServerResponse.write (_http_outgoing.js:617:10)
at ReadFileContext.callback (/home/eddo/nodejs_test/demo_readfile.js:6:9)
at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:420:13)
Ich habe versucht, ein vergebliches Ergebnis res.write(data.toString());
zu erzielen, und es so geändert, dass console.log(data);
ich eine Konsolenausgabe von:
undefined
undefined
aber zumindest gab mir kein "Diese Seite kann nicht erreicht werden (ERR_CONNECTION_REFUSED)".
Ihr Dateipfad ist leicht ausgeschaltet:
fs.readFile('demofile1.html', function(err, data) {
Der Knoten sucht 'demofile1.html'
im Ausgangsverzeichnis anstelle des aktuellen Verzeichnisses. Verwenden Sie stattdessen
fs.readFile('./demofile1.html', function(err, data) {
oder besser:
fs.readFile(__dirname + '/demofile1.html', function(err, data) {