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

Posted

技术标签:

【中文标题】Heroku:NodeJS Express 服务器无法提供图像【英文标题】:Heroku: NodeJS Express server can't serve image 【发布时间】: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'

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

https://***.com/a/40931927/2516399 https://***.com/a/25463996/2516399 https://***.com/a/26079640/2516399

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

【问题讨论】:

【参考方案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 我很高兴它有帮助。

以上是关于Heroku:NodeJS Express 服务器无法提供图像的主要内容,如果未能解决你的问题,请参考以下文章

Nodejs 快递,Heroku CORS

在heroku上部署Nodejs+Express+React+Webpack应用

端口 34037 已在使用 Heroku + Nodejs + Express + WebSockets

Heroku 无法在 nodejs 的 express-router 上拥有从“@”开始的路由

如何将 Typescript、NodeJS 和 Express 应用程序部署到 Heroku

Heroku 应用程序 EACCES 上的 Nodejs Express 0.0.0.0:80