Статические файлы с помощью express.js
Я хочу использовать подкаталог index.html
и /media
как статические файлы. Файл индекса должен обслуживаться как на страницах /index.html
, так и /
.
У меня
web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));
но вторая строка, видимо, служит для всего __dirname
, включая все файлы в нем (а не только index.html
и media
), которые мне не нужны.
Я также пробовал
web_server.use("/", express.static(__dirname + '/index.html'));
но доступ к базовому URL /
затем приводит к запросу web_server/index.html/index.html
(double index.html
component), который, конечно, не выполняется.
Любые идеи?
Кстати, я не смог найти абсолютно никакой документации в Express по этой теме (static()
+ ее параметры)... разочаровывает. Также приветствуется ссылка на документ.
Ответы
Ответ 1
express.static()
ожидает, что первым параметром будет путь к каталогу, а не имя файла. Я бы предложил создать другой подкаталог, содержащий ваш index.html
и использовать его.
Предоставление статических файлов в документацию Express или более подробную документацию по предоставлению serve-static
, включая поведение по умолчанию при обслуживании index.html
:
По умолчанию этот модуль отправляет файлы "index.html" в ответ на запрос к каталогу. Чтобы отключить этот набор false или предоставить новый индекс, передайте строку или массив в предпочтительном порядке.
Ответ 2
Если у вас есть эта настройка
/app
/public/index.html
/media
Тогда это должно получить то, что вы хотели
var express = require('express');
//var server = express.createServer();
// express.createServer() is deprecated.
var server = express(); // better instead
server.configure(function(){
server.use('/media', express.static(__dirname + '/media'));
server.use(express.static(__dirname + '/public'));
});
server.listen(3000);
Уловка оставляет эту строку в качестве последней резервной копии
server.use(express.static(__dirname + '/public'));
Что касается документации, так как Express использует связующее ПО, мне было проще просто посмотреть исходный код подключения напрямую.
Например, эта строка показывает, что поддерживается index.html
https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L140
Ответ 3
В новейшей версии выражения "createServer" устарел. Этот пример работает для меня:
var express = require('express');
var app = express();
var path = require('path');
//app.use(express.static(__dirname)); // Current directory is root
app.use(express.static(path.join(__dirname, 'public'))); // "public" off of current is root
app.listen(80);
console.log('Listening on port 80');
Ответ 4
res.sendFile
& express.static
как будет работать для этого
var express = require('express');
var app = express();
var path = require('path');
var public = path.join(__dirname, 'public');
// viewed at http://localhost:8080
app.get('/', function(req, res) {
res.sendFile(path.join(public, 'index.html'));
});
app.use('/', express.static(public));
app.listen(8080);
Где public
- папка, в которой находится код на стороне клиента
Как предложено @ATOzTOA и пояснено @Vozzie, path.join
принимает пути для объединения в качестве аргументов, +
передает единственный аргумент в path.
Ответ 5
npm install serve-index
var express = require('express')
var serveIndex = require('serve-index')
var path = require('path')
var serveStatic = require('serve-static')
var app = express()
var port = process.env.PORT || 3000;
/**for files */
app.use(serveStatic(path.join(__dirname, 'public')));
/**for directory */
app.use('/', express.static('public'), serveIndex('public', {'icons': true}))
// Listen
app.listen(port, function () {
console.log('listening on port:',+ port );
})
Ответ 6
используйте ниже внутри вашего app.js
app.use(express.static('folderName'));
(имя_папки - это папка, в которой есть файлы) - помните, что доступ к этим ресурсам осуществляется напрямую через путь к серверу (то есть http://localhost: 3000/abc.png (где abc.png находится в папке folderName)
Ответ 7
const path = require('path');
const express = require('express');
const app = new express();
app.use(express.static('/media'));
app.get('/', (req, res) => {
res.sendFile(path.resolve(__dirname, 'media/page/', 'index.html'));
});
app.listen(4000, () => {
console.log('App listening on port 4000')
})