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



если я делаю



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


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




экспресс-устаревший res.sendfile используйте res.sendFile вместо




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



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



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


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




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




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



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



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



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


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



я использую Экспресс-4.x.

762   9  

9 ответов:

The express.static middleware является отдельной от 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, сначала вам нужно вернуться на один уровень:../public/index1.html.

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

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

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

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

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

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

альтернатива, которая еще не была указана, которая работала для меня, просто использует 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') );
});

(узел В6.10.0)

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

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

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

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

app.use(express.static('public'));

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

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)

Это также удваивается как простой способ ответить с индексом.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");
});

Comments

    Ничего не найдено.