Heroku: сервер NodeJS Express не может обслуживать изображение - PullRequest
1 голос
/ 25 сентября 2019

У меня есть простое приложение на Heruku, которое показывает изображение.

app.js
package.json
package-lock.json
public
   |__ image1.png
   |__ image2.png

Вот содержимое app.js

const express = require('express');
const app = express();
const path = require('path');

app.set('port', (process.env.PORT || 5000));
app.use(express.static('public'));

app.get('/', function(request, response) {
    const today = new Date().getHours();
    const img = today <= 13 ? 'image1.png' : 'image2.png';
    response.sendFile(path.join(__dirname, '../public/' + img));
});

В Herokulog Я получаю эту ошибку: Ошибка: ENOENT: нет такого файла или каталога, stat '/public/image1.png'

Я сделал много попыток, следуя этим ответам:

Ничто из этого не сработало в моем случае.Что может быть не так?

1 Ответ

1 голос
/ 25 сентября 2019

Я думаю, что проблема в этой строке path.join(__dirname, '../public/' + img)

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

const express = require('express');
const app = express();
const path = require('path');
//app.set('port', (process.env.PORT || 5000));
app.use(express.static('public'));

app.get('/', function(request, response) {
    const today = new Date().getHours();
   const img = today <= 13 ? 'image1.png' : 'image2.png';
   console.log(__dirname);
   console.log(path.join(__dirname, '/public', img))
   response.sendFile(path.join(__dirname, '/public', img));

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...