абсолютный путь res.sendFile

Если я сделаю

res.sendfile('public/index1.html'); 

то я получаю предупреждение на консоли сервера

express deprecated res.sendfile : вместо этого используйте res.sendFile

но он отлично работает на стороне клиента.

Но когда я меняю его на

 res.sendFile('public/index1.html'); 

Я получаю сообщение об ошибке

TypeError: путь должен быть абсолютным или указать root для res.sendFile

и index1.html не отображается.

Я не могу понять, что такое абсолютный путь. У меня есть server.js каталог на том же уровне, что и server.js . Я делаю res.sendFile с server.js . Я также объявил app.use(express.static(path.join(__dirname, 'public')));

Добавление моей структуры каталогов:

 /Users/sj/test/ ....app/ ........models/ ....public/ ........index1.html 

Каков абсолютный путь, который нужно указать здесь?

Я использую Express 4.x.

Средство res.sendFile отдельно от res.sendFile , поэтому инициализация его абсолютным путем к вашему public каталогу ничего не сделает для res.sendFile . Вы должны использовать абсолютный путь напрямую с res.sendFile . Есть два простых способа сделать это:

  1. res.sendFile(path.join(__dirname, '../public', 'index1.html'));
  2. res.sendFile('index1.html', { root: path.join(__dirname, '../public') });

Примечание: __dirname возвращает каталог, в котором находится исполняемый скрипт. В вашем случае это выглядит как server.js в app/ . Итак, чтобы получить ../public/index1.html к public , сначала вам нужно вернуться на один уровень: ../public/index1.html .

Примечание: path – это встроенный модуль , для которого require d для работы вышеприведенного кода: var path = require('path');

Попробуйте это вместо этого:

 res.sendFile('public/index1.html' , { root : __dirname}); 

Это сработало для меня. корень: __ dirname примет адрес, где server.js находится в приведенном выше примере, а затем, чтобы перейти к index1.html (в этом случае), возвращаемый путь – это получить каталог, в котором находится общая папка.

 res.sendFile( __dirname + "/public/" + "index1.html" ); 

где __dirname будет управлять именем каталога, в котором находится исполняемый скрипт ( server.js ).

Альтернатива, которая еще не указана в списке, которая работает для меня, – это просто использовать path.resolve с отдельными строками или только с одним path.resolve :

 // comma separated app.get('/', function(req, res) { res.sendFile( path.resolve('src', 'app', 'index.html') ); }); 

Или

 // just one string with the path app.get('/', function(req, res) { res.sendFile( path.resolve('src/app/index.html') ); }); 

(Узел v6.10.0)

Идея получена из https://stackoverflow.com/a/14594282/6189078

Другой способ сделать это, написав меньше кода.

 app.use(express.static('public')); app.get('/', function(req, res) { res.sendFile('index.html'); }); 

Я попробовал это, и это сработало.

 app.get('/', function (req, res) { res.sendFile('public/index.html', { root: __dirname }); }); 

process.cwd() возвращает абсолютный путь вашего проекта.

Затем :

 res.sendFile( `${process.cwd()}/public/index1.html` ); 

Основываясь на других ответах, это простой пример того, как выполнить наиболее распространенное требование:

 const app = express() app.use(express.static('public')) // relative path of client-side code app.get('*', function(req, res) { res.sendFile('index.html', { root: __dirname }) }) app.listen(process.env.PORT) 

Это также удваивается как простой способ ответить index.html на каждый запрос , потому что я использую звездочку * чтобы поймать все файлы, которые не были найдены в вашем статическом (общедоступном) каталоге; который является наиболее распространенным вариантом использования для веб-приложений. Перейдите в / чтобы вернуть индекс только в корневой путь.

Если вы хотите установить это один раз и использовать его повсюду, просто настройте свое собственное промежуточное программное обеспечение. Когда вы настраиваете приложение, для определения новой функции объекта ответа используйте следующее:

 app.use((req, res, next) => { res.show = (name) => { res.sendFile(`/public/${name}`, {root: __dirname}); }; next(); }); 

Затем используйте его следующим образом:

 app.get('/demo', (req, res) => { res.show("index1.html"); }); 
  • Являются ли "{Binding Path =.}" И "{Binding}" действительно равными
  • Абсолютный путь и относительный путь
  • Как добавить папку в путь поиска сборки во время выполнения в .NET?
  • Абсолютный путь назад к веб-пути
  • Получение пути к сценарию R
  • C #, путь к% AppData%
  • Разница между косой чертой (/) и обратным слэшем (\) в пути к файлу
  • Является ли относительный путь в файле CSS относительно файла CSS?
  • Как создать несколько путей вывода в конфигурации Webpack
  • Определить, имеет ли пользовательский путь определенный каталог
  • Android SDK менеджер не откроет
  • Давайте будем гением компьютера.