我刚开始使用Heroku,发现一组特定的图像在本地工作良好,在我部署的应用程序上显示断开的链接。控制台错误是"加载资源失败:服务器响应的状态为404(未找到)">
该应用程序是一个普通的Js应用程序,使用不可变Js和Node Express服务器,该服务器使用来自Nasa火星探测器api的数据。
My app on Heroku
我的服务器在点击时发出Get请求,并为3个火星漫游者获取数据和图像数组。由于Nasa的api不包括实际漫游车本身的图像,只有漫游车拍摄的图像,所以我找到了每个漫游车的图像,存储在我的本地资产文件夹中,并通过api调用显示,如下-
<img src='https://mars-rover-dashboard-app.herokuapp.com/public/assets/images/${
roverData.rover.get("name") + ".png"}' alt='rover image' class='sidebar__main-rover-img'>
我研究了这个问题,并认为这可能是因为它引用了一个只存在于本地的路径,而不是在Heroku应用程序本身。我添加了我的Heroku应用程序的url,它仍然不起作用。不知道还能尝试什么吗?
我不确定你的问题是什么,但下面的解决方案帮助我在Heroku上提供图像。当从js前端使用它时,创建一个提供图像的路由会更容易、更好。
提供图片的路由
app.get('/images/:id', jsonParser, (req, res) => {
const id = req.params.id
res.sendFile(id, { root: './images' })
})
把images文件夹放在app.js文件所在的位置,并在你的前端提供源代码,像这样
<img src="/images/rovername.png" />
这将创建一个get请求到您的/images
路由的图像的名称,如
https://mars-rover-dashboard-app.herokuapp.com/images/rovername.png
.
最后我只是写了逻辑来返回Nasa网站上的带有绝对路径的图像。也许不是最优雅的解决方案,但现在可以快速修复它。在我的研究中,我发现在Amazon Web Services上设置S3桶,这是我将来对这个应用程序进行修改的地方。