Экспресс-обслуживание статического файла: сервер и клиент в разных местах

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

Это текущий каталог у меня есть:

|__client
|   |__thumbnails.html
|
|__server
    |__app.js

Я пытался просто использовать app.use(express.static(path.join(__dirname, '..', 'client')));, но это не будет обслуживать файл вообще. Тем не менее, когда я использовал тот же path.join для получения запроса на '/' он отправит файл.

Вот этот код у меня есть на данный момент. Это работает, слава Богу, но я хочу посмотреть, есть ли способ для меня обслуживать его без фактической отправки файла.

const express = require('express');
const path = require('path');
const similar = require('./routes/similar');
const image = require('./routes/images');

const app = express();

app.use(express.static(path.join(__dirname, '..', 'client')));

app.use('/item', similar);
app.use('/thumbnail', image);

app.get('/', (req, res) => res.status(200).sendFile(path.join(__dirname, '..', 'client', 'thumbnail.html')));

module.exports = app;

2 ответа

Решение

Вы можете создать файл так, как вам нравится, с помощью конфигурации модуля serve-static: https://expressjs.com/en/resources/middleware/serve-static.html

С этой страницы:

var express = require('express')
var serveStatic = require('serve-static')

var app = express()

app.use(serveStatic('public/ftp', {'index': ['default.html', 'default.htm']}))
app.listen(3000)

теперь все, что вы помещаете в массив 'index', будет просматриваться в указанном вами порядке. В противном случае, вы все равно сможете получить доступ к html-файлу, если вы введете фактическое имя файла в URL.

Ладно, думаю, я понял это. Таким образом, очевидно, вы должны сохранить HTML как индекс. Экспресс ищет это, но так как у меня нет index.html, он пропускает мой thumbnails.html.

Поэтому переименование моего html в index.html решило проблему.

ОБНОВЛЕНИЕ: Итак, читая документацию, вы можете установить значение по умолчанию, передав опции. Я прошел в { index: 'thumbnails.html' } в качестве второго аргумента для статического, и он служит моим HTML.

Другие вопросы по тегам