Heroku:NodeJS Express服务器无法提供图像

时间:2019-09-25 13:48:42

标签: javascript node.js express heroku path

我在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));
});

在Heroku日志中,我得到以下错误:错误:ENOENT:没有这样的文件或目录,状态为'/public/image1.png'

按照这些答案,我做了很多尝试:

在我的情况下,这些方法都不起作用。怎么了?

1 个答案:

答案 0 :(得分:2)

我认为问题出在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));

});