[add] Mein nächstes Problem ist also, wenn ich versuche, eine neue Abhängigkeit hinzuzufügen (npm install --save socket.io). Die JSON-Datei ist ebenfalls gültig. Ich erhalte die folgende Fehlermeldung: json konnte nicht analysiert werden
npm ERR! Unexpected string
npm ERR! File: /Users/John/package.json
npm ERR! Failed to parse package.json data.
npm ERR! package.json must be actual JSON, not just JavaScript.
npm ERR!
npm ERR! This is not a bug in npm.
npm ERR! Tell the package author to fix their package.json file. JSON.parse
Also habe ich versucht herauszufinden, warum dieser Fehler zurückgekehrt ist. Alle Dateien (HTML, JSON, JS) befinden sich auf meinem Desktop im selben Ordner. Ich benutze node.js und socket.io
Dies ist meine JS-Datei:
var app = require('express')();
var http = require('http').Server(app);
app.get('/', function(req, res){
res.sendFile('index.html');
});
http.listen(3000,function(){
console.log('listening on : 3000');
});
Folgendes wird zurückgegeben:
MacBook-Pro:~ John$ node /Users/John/Desktop/Chatapp/index.js
listening on : 3000
TypeError: path must be absolute or specify root to res.sendFile
at ServerResponse.sendFile (/Users/John/node_modules/express/lib/response.js:389:11)
at /Users/John/Desktop/Chatapp/index.js:5:7
at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
at next (/Users/John/node_modules/express/lib/router/route.js:100:13)
at Route.dispatch (/Users/John/node_modules/express/lib/router/route.js:81:3)
at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
at /Users/John/node_modules/express/lib/router/index.js:234:24
at Function.proto.process_params (/Users/John/node_modules/express/lib/router/index.js:312:12)
at /Users/John/node_modules/express/lib/router/index.js:228:12
at Function.match_layer (/Users/John/node_modules/express/lib/router/index.js:295:3)
TypeError: path must be absolute or specify root to res.sendFile
at ServerResponse.sendFile (/Users/John/node_modules/express/lib/response.js:389:11)
at /Users/John/Desktop/Chatapp/index.js:5:7
at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
at next (/Users/John/node_modules/express/lib/router/route.js:100:13)
at Route.dispatch (/Users/John/node_modules/express/lib/router/route.js:81:3)
at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
at /Users/John/node_modules/express/lib/router/index.js:234:24
at Function.proto.process_params (/Users/John/node_modules/express/lib/router/index.js:312:12)
at /Users/John/node_modules/express/lib/router/index.js:228:12
at Function.match_layer (/Users/John/node_modules/express/lib/router/index.js:295:3)
quelle
path.resolve(__dirname, '.../public')
? Dadurch wird das Unterverzeichnis 'public' des übergeordneten Verzeichnisses des Skripts aufgelöst.../../<etc>
. Beachten Sie das Komma zwischen__dirname
und../public
. Die Verwendung eines + -Zeichens funktioniert nicht.Versuchen Sie, den Root-Pfad hinzuzufügen.
quelle
In .mjs-Dateien haben wir derzeit keinen __dirname
daher
quelle
Wenn Sie dem Pfad vertrauen, ist path.resolve eine Option:
quelle
Der Fehler ist ziemlich einfach. Der Grund ist höchstwahrscheinlich, dass sich Ihre Datei index.html nicht im Stammverzeichnis befindet.
Oder wenn es sich im Stammverzeichnis befindet, funktioniert die relative Referenzierung nicht.
Sie müssen dem Server also den genauen Speicherort Ihrer Datei mitteilen. Dies kann mithilfe der dirname-Methode in NodeJs erfolgen. Ersetzen Sie einfach Ihren Code durch diesen:
Stellen Sie sicher, dass Sie vor Ihrer Homepage den Schrägstrich "/" einfügen. Andernfalls lautet Ihr Pfad: rootDirectoryindex.html
Während Sie möchten, dass es ist: rootDirectory / index.html
quelle
Ich löse dies mit der Pfadvariablen. Der Beispielcode sieht wie folgt aus.
quelle
Wenn Sie an Root Directory arbeiten, können Sie diesen Ansatz verwenden
Wenn Sie jedoch Routen verwenden, die sich in einem Ordner befinden, müssen
/Routes/someRoute.js
Sie beispielsweise Folgendes tunquelle
In Typoskript mit relativem Pfad zum Symbol:
quelle
Beim Aufruf von localhost: 8080 wird auf index.html umgeleitet.
quelle
Ich habe den folgenden Code verwendet und versucht, die Datei sitemap.xml anzuzeigen
quelle
Dies kann auf andere Weise gelöst werden:
process.env.PWD
wird dem Arbeitsverzeichnis vorangestellt, als der Prozess gestartet wurde.quelle
Ich habe das getan und jetzt funktioniert meine App richtig.
quelle
Sie können doppelte Schrägstriche in Ihrem Verzeichnis verwenden, z
quelle