[add] Donc, mon problème suivant est que lorsque j'essaie d'ajouter une nouvelle dépendance (npm install --save socket.io). Le fichier JSON est également valide. Je reçois cette erreur: Impossible d’analyser json
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
(Je ne sais pas si cela est autorisé sur le débordement de pile, quelqu'un s'il vous plaît laissez-moi savoir si ce n'est pas le cas)
J'ai donc essayé de comprendre pourquoi cette erreur revenait. Tous les fichiers (HTML, JSON, JS) se trouvent dans le même dossier sur mon bureau. J'utilise node.js et socket.io (Nouveau développeur Web, ne soyez pas trop dur: p)
Ceci est mon fichier JS:
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');
});
C'est ce qui est retourné:
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)
L'erreur est assez claire, vous devez spécifier un chemin absolu (au lieu de relatif) et/ou définir root
dans l'objet de configuration pour res.sendFile()
. Exemples:
// assuming index.html is in the same directory as this script
res.sendFile(__dirname + '/index.html');
ou spécifiez une racine (utilisée comme chemin de base pour le premier argument de res.sendFile()
:
res.sendFile('index.html', { root: __dirname });
Spécifier le chemin root
est plus utile lorsque vous transmettez un chemin de fichier généré par l'utilisateur qui pourrait potentiellement contenir des parties mal formées/malveillantes telles que ..
(par exemple ../../../../../../etc/passwd
). La définition du chemin root
empêche l'utilisation de tels chemins malveillants pour accéder à des fichiers situés en dehors de ce chemin de base.
Essayez d'ajouter le chemin racine.
app.get("/", function(req, res)
{
res.sendFile("index.html", {"root": __dirname});
});
dans les fichiers .mjs, nous n'avons pour l'instant pas __dirname
par conséquent
res.sendFile('index.html', { root: '.' })
Si vous faites confiance au chemin, path.resolve est une 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'));
});
L'erreur est assez simple. La raison la plus probable est que votre fichier index.html ne se trouve pas dans le répertoire racine.
Ou s'il se trouve dans le répertoire racine, le référencement relatif ne fonctionne pas.
Vous devez donc indiquer au serveur l'emplacement exact de votre fichier. Cela peut être fait en utilisant la méthode dirname dans NodeJs. Il suffit de remplacer votre code par celui-ci:
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
Assurez-vous que vous ajoutez le symbole barre oblique "/" avant votre page d'accueil. Sinon, votre chemin deviendra: rootDirectoryindex.html
Alors que vous voulez que ce soit: rootDirectory/index.html
Si vous travaillez sur le répertoire racine, vous pouvez utiliser cette approche.
res.sendFile(__dirname + '/FOLDER_IN_ROOT_DIRECTORY/index.html');
mais si vous utilisez Routes qui se trouve dans un dossier, disons /Routes/someRoute.js
, vous devrez faire quelque chose comme ceci.
const path = require("path");
...
route.get("/some_route", (req, res) => {
res.sendFile(path.resolve('FOLDER_IN_ROOT_DIRECTORY/index.html')
});
Vous pourriez envisager d’utiliser des doubles barres obliques sur votre répertoire, par exemple
app.get('/',(req,res)=>{
res.sendFile('C:\\Users\\DOREEN\\Desktop\\Fitness Finder' + '/index.html')
})
Dans TypeScript avec un chemin relatif à l’icône:
import path from 'path';
route.get('/favicon.ico', (_req, res) => res.sendFile(path.join(__dirname, '../static/myicon.png')));
Il redirigera vers index.html sur localhost: appel 8080.
app.get('/',function(req,res){
res.sendFile('index.html', { root: __dirname });
});
Je résous cela en utilisant la variable de chemin. L'exemple de code ressemblera à celui ci-dessous.
var path = require("path");
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname + '/index.html'));
})