[add] Итак, моя следующая проблема - когда я пытаюсь добавить новую зависимость (npm install --save socket.io). Файл JSON также действителен. Я получаю эту ошибку: не удалось проанализировать 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
Итак, я пытался выяснить, почему эта ошибка возвращалась. Все файлы (HTML, JSON, JS) находятся в одной папке на моем рабочем столе. Я использую node.js и socket.io
Это мой файл 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');
});
Вот что возвращается:
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)
источник
path.resolve(__dirname, '.../public')
? Это преобразуется в подкаталог public в родительский каталог скрипта.../../<etc>
синтаксисом типа. Обратите внимание на запятую между__dirname
и../public
. Использование знака + не работает.Попробуйте добавить корневой путь.
источник
в файлах .mjs у нас пока нет __dirname
следовательно
источник
Если вы доверяете пути, опция path.resolve:
источник
Ошибка довольно проста. Скорее всего, причина в том, что ваш файл index.html не находится в корневом каталоге.
Или, если он находится в корневом каталоге, то относительная ссылка не работает.
Так что вам нужно сообщить серверу точное местоположение вашего файла. Это можно сделать с помощью метода dirname в NodeJs. Просто замените ваш код следующим:
Убедитесь, что вы добавили символ косой черты "/" перед вашей домашней страницей. В противном случае ваш путь станет следующим: rootDirectoryindex.html
В то время как вы хотите, чтобы это было: rootDirectory / index.html
источник
Я решаю это с помощью переменной пути. Пример кода будет выглядеть ниже.
источник
Если вы работаете с корневым каталогом, то вы можете использовать этот подход
но если вы используете маршруты, которые находятся внутри папки, скажем,
/Routes/someRoute.js
вам нужно будет сделать что-то вроде этогоисточник
В Typescript с относительным путем к значку:
источник
Он будет перенаправлять в index.html при вызове localhost: 8080.
источник
Я использовал приведенный ниже код и попытался показать файл sitemap.xml
источник
Это может быть решено другим способом:
process.env.PWD
при запуске процесса будет добавлен рабочий каталог.источник
Я сделал это, и теперь мое приложение работает нормально,
источник
Вы можете рассмотреть возможность использования двойной косой черты в вашем каталоге, например
источник