【问题标题】:Node express server not serving images folder节点快递服务器不提供图像文件夹
【发布时间】:2017-05-22 06:59:45
【问题描述】:

当我在生产服务器上运行捆绑的 React 应用程序时,它找不到我的图像文件,我不知道为什么。我很确定这与我的 node express 配置和/或我的.ejs 模板文件有关。

server.js

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

app.use('/static', express.static(__dirname + '/static'));

app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

app.get('*', function (req, res) {
    res.render("index");
});

const port = process.env.PORT || 3000;
const env = process.env.NODE_ENV || 'production';
app.listen(port, err => {
  if (err) {
    return console.error(err);
  }
  console.info(`Server running on http://localhost:${port} [${env}]`);
});

index.ejs

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Production Server</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link href="https://fonts.googleapis.com/css?family=BenchNine" rel="stylesheet">
    <link rel="stylesheet" href="../static/css/main.css">
  </head>
  <body>
    <div id="root"></div>
    <script src="../static/js/bundle.js"></script>
  </body>
</html>

我的 CSS 样式表在模板文件中被调用,所有的 JS 被捆绑到 bundle.js 中,在 script 标签中被引用。我不确定如何让我的应用程序识别 /img 文件夹,因为目前它还没有。

这是我的文件结构:

- static
   - css
      - main.css
   - js
      - bundle.js
   - img (contains all image files)

但是,当我运行该应用程序并在 Chrome 控制台中打开“源”时,未提供 /img 文件。

我认为这行表明 express 服务于 /static 文件夹中的所有内容...

app.use('/static', express.static(__dirname + '/static')); 

...但只有三分之二的文件被提供。

如果有人能告诉我我的设置哪里出了问题,我将不胜感激。

提前致谢。

【问题讨论】:

  • 你的js/css加载成功了吗?
  • 是的,这两个都很好。
  • /img 不存在,它将是 /static/img - 或者我错过了什么?
  • 是的,它是static/img,但我认为应该提供static 文件夹中的所有内容,包括所有子文件夹,其中一个是/img...错了吗?
  • 您实际上并没有加载任何图像文件吗?然后它不会显示在“源”选项卡中。

标签: node.js reactjs express server ejs


【解决方案1】:

DevTools 中的源选项卡将仅显示您的案例 index.ejs 中浏览器正在使用的内容,它仅使用 .js 和 .css 文件

在您正在加载的 Index.ejs 中

&lt;script src="../static/js/bundle.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" href="../static/css/main.css"&gt;

这意味着中间件app.use('/static', express.static(__dirname + '/static')); 将检查/js/bundle.js/css/main.css 是否存在于静态文件夹中,如果是,它将为它们提供服务,如果没有,则将给出文件或文件夹未找到。

这意味着您将从 index.ejs 中的静态文件夹加载或在 index.ejs 中使用的任何内容和文件都将出现在源选项卡中。 尝试从静态文件夹在 index.ejs 中添加图像,然后查看源选项卡

或删除 &lt;script src="../static/js/bundle.js"&gt;&lt;/script&gt; 并查看源选项卡,您将看不到 JS 文件夹,因为它没有被 index.ejs 使用

总是重新加载服务器

【讨论】:

  • 我已经尝试过了 - 它有效。但是,我想从我的 react jsx 代码中加载图像,该代码存在于bundle.js 中 - 这可以加载,因为我的 React 应用程序可以根据需要加载,但由于某种原因,此代码中的 img 标记不引用我的图像文件文件树。
  • 这是某种路径问题。
猜你喜欢
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 2019-08-05
  • 2012-06-12
  • 2012-01-17
  • 1970-01-01
相关资源
最近更新 更多