【问题标题】:Heroku: NodeJS Express server can't serve imageHeroku:NodeJS Express 服务器无法提供图像
【发布时间】:2020-01-25 17:42:07
【问题描述】:

我在 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:没有这样的文件或目录,stat '/public/image1.png'

我做了很多尝试,遵循这些答案:

在我的情况下,这些都不起作用。有什么问题?

【问题讨论】:

    标签: javascript node.js express heroku path


    【解决方案1】:

    我认为问题出在这一行path.join(__dirname, '../public/' + img)

    __dirname 返回正在执行脚本的目录位置。 在您的情况下,当您使用 '../public' 加入路径时,它可能会跳过 app.js 父目录并选择 app.js parent 的父目录。所以用/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));
    
    });
    

    【讨论】:

    • @smartmouse 我很高兴它有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 2016-02-28
    • 1970-01-01
    • 2017-11-05
    • 2015-05-20
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多