Я хотел бы обслуживать html файл без указания его расширения. Есть ли способ сделать это без определения маршрута? Например, вместо
/helloworld.html
Я хотел бы сделать только
/helloworld
Я хотел бы обслуживать html файл без указания его расширения. Есть ли способ сделать это без определения маршрута? Например, вместо
/helloworld.html
Я хотел бы сделать только
/helloworld
Решение quick'n'dirty заключается в том, чтобы прикрепить .html
к запросам, у которых нет периода в них и для которых существует HTML файл в общедоступном каталоге:
var fs = require('fs');
var publicdir = __dirname + '/public';
app.use(function(req, res, next) {
if (req.path.indexOf('.') === -1) {
var file = publicdir + req.path + '.html';
fs.exists(file, function(exists) {
if (exists)
req.url += '.html';
next();
});
}
else
next();
});
app.use(express.static(publicdir));
вы можете просто использовать опцию расширения в методе express.static.
app.use(express.static(path.join(__dirname, 'public'),{index:false,extensions:['html']}));
В то время как ответ Роберта более элегантный, есть еще один способ сделать это. Я добавляю этот ответ только ради полноты. Чтобы обслуживать статические файлы без расширения, вы можете создать папку с именем маршрута, с которым хотите работать, а затем создать в нем файл index.html
.
Принимая мой собственный пример, если я хотел бы служить hello.html
в /hello
. Я бы создал каталог под названием hello
и поместил в него файл index.html. Теперь, когда '/hello' называется express, автоматически будет обслуживать этот файл без расширения.
Вид очевидный, поскольку это поддерживается всеми веб-фреймворками, но я пропустил его тогда.
Если вы хотите сделать обратный путь, как я сделал (обслуживающий html файл под названием "helloworld" как html), это промежуточное программное обеспечение, которое я использовал.
var express = require('express');
var app = express();
app.use(function(req, res, next) {
if (req.path.indexOf('.') === -1) {
res.setHeader('Content-Type', 'text/html');
}
next();
});
app.use('/', express.static(__dirname + '/public'));
app.listen(8080, function () {
console.log('App listening on port 8080!');
})