[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 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
(Nicht sicher, ob dies für den Stack-Überlauf zulässig ist, bitte lassen Sie es mich wissen, falls dies nicht der Fall ist.)
Ich habe versucht herauszufinden, warum dieser Fehler zurückgegeben wurde. Alle Dateien (HTML, JSON, JS) befinden sich im selben Ordner auf meinem Desktop. Ich verwende node.js und socket.io (New-ish Webentwickler, bitte seien Sie nicht zu hart: p)
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)
Der Fehler ist ziemlich klar, Sie müssen einen absoluten (statt relativen) Pfad angeben und/oder root
im Konfigurationsobjekt für res.sendFile()
angeben. Beispiele:
// assuming index.html is in the same directory as this script
res.sendFile(__dirname + '/index.html');
oder einen Stamm angeben (der als Basispfad für das erste Argument von res.sendFile()
verwendet wird):
res.sendFile('index.html', { root: __dirname });
Die Angabe des root
-Pfads ist sinnvoller, wenn Sie einen vom Benutzer generierten Dateipfad übergeben, der möglicherweise fehlerhafte/schädliche Teile wie ..
(z. B. ../../../../../../etc/passwd
) enthalten kann. Durch das Festlegen des Pfads root
wird verhindert, dass solche schädlichen Pfade für den Zugriff auf Dateien außerhalb dieses Basispfads verwendet werden.
Versuchen Sie, den Stammpfad hinzuzufügen.
app.get("/", function(req, res)
{
res.sendFile("index.html", {"root": __dirname});
});
in .mjs-Dateien haben wir momentan noch kein __dirname
daher
res.sendFile('index.html', { root: '.' })
Wenn Sie dem Pfad vertrauen, ist path.resolve eine Option:
var path = require('path');
// All other routes should redirect to the index.html
app.route('/*')
.get(function(req, res) {
res.sendFile(path.resolve(app.get('appPath') + '/index.html'));
});
Der Fehler ist ziemlich einfach. Der Grund ist wahrscheinlich, dass sich Ihre index.html-Datei nicht im Stammverzeichnis befindet.
Wenn es sich im Stammverzeichnis befindet, funktioniert die relative Referenzierung nicht.
Sie müssen dem Server also den genauen Ort Ihrer Datei mitteilen. Dies könnte durch Verwendung der dirname-Methode in NodeJs erfolgen. Ersetzen Sie einfach Ihren Code durch diesen Code:
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
Stellen Sie sicher, dass Sie das Schrägstrichsymbol "/" vor Ihrer Startseite einfügen. Andernfalls wird Ihr Pfad zu: rootDirectoryindex.html
Während Sie möchten, dass es ist: rootDirectory/index.html
Wenn Sie im Stammverzeichnis arbeiten, können Sie diesen Ansatz verwenden
res.sendFile(__dirname + '/FOLDER_IN_ROOT_DIRECTORY/index.html');
wenn Sie jedoch Routen verwenden, die sich in einem Ordner befinden, sagen wir /Routes/someRoute.js
, dann müssen Sie so etwas tun
const path = require("path");
...
route.get("/some_route", (req, res) => {
res.sendFile(path.resolve('FOLDER_IN_ROOT_DIRECTORY/index.html')
});
Möglicherweise sollten Sie in Ihrem Verzeichnis doppelte Schrägstriche verwenden, z
app.get('/',(req,res)=>{
res.sendFile('C:\\Users\\DOREEN\\Desktop\\Fitness Finder' + '/index.html')
})
In TypeScript mit relativem Pfad zum Symbol:
import path from 'path';
route.get('/favicon.ico', (_req, res) => res.sendFile(path.join(__dirname, '../static/myicon.png')));
Beim Aufruf von localhost: 8080 wird nach index.html umgeleitet.
app.get('/',function(req,res){
res.sendFile('index.html', { root: __dirname });
});
Ich löse das mithilfe der Pfadvariablen. Der Beispielcode sieht wie folgt aus.
var path = require("path");
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname + '/index.html'));
})