【问题标题】:Cannot GET /blah.html - .ejs can't load html?无法获取 /blah.html - .ejs 无法加载 html?
【发布时间】:2019-01-21 11:59:15
【问题描述】:

我正在使用 Nodejs 和 Express 创建动态网页。

我有一个包含此 iframe 的 home.ejs 文件:

<iframe id="newstable" src="/news_tables/2018-08-04.html" height="1000" width="100%"></iframe>

我的文件夹目录是:

News_Aggregator (includes app.js)
News_Aggregator/news_tables (includes a bunch of html files, e.g. `2018-08-04.html`)
News_Aggregator/views (includes my `home.ejs` file)

还有我的app.js

const express = require('express');
const app = express();
app.set("view engine", "ejs");

app.get('/', function(req, res){
  res.render('home.ejs');
});

app.listen(8000, () => {
  console.log('Example app listening on port 8000!')
});

但是,当 home.ejs 被渲染时,我的 iframe 不会加载 html 页面:

这适用于“普通”HTML。要让.ejs 文件找到并正确呈现,我缺少什么?

【问题讨论】:

    标签: javascript node.js express ejs


    【解决方案1】:

    您的 HTML 是从 .ejs 文件生成的这一事实无关紧要。

    您的 HTML 表明浏览器应该向服务器询问 URL /news_tables/2018-08-04.html

    您的 HTTP 服务器有一个路由 app.get('/', 并且没有其他路由

    您的 HTTP 服务器不知道 URL /news_tables/2018-08-04.html,因此它返回一个 404 Not Found

    您需要编写代码来提供您想要的所有 URL。

    如果您想提供静态文件,您可能应该查看 Express static() 中间件。

    【讨论】:

    • 啊哈,这是有道理的。我正在研究静态方法,但不太明白它们是如何链接的。我保持我的ejs 文件相同,但添加了app.use(express.static('news_tables')) 但它仍然说无法获取。
    【解决方案2】:

    您收到错误是因为服务器不知道从哪里获取文件。 首先,您必须定义静态 .ejs 文件的位置。让我们说这样的话。如果您的文件位于公共文件夹(ejs、css 等)中,您将从那里获取它们。设置两者:

    app.use(express.static(__dirname + '/public'))
    app.set('views', path.join(__dirname, '/public'));
    

    如果您有 home.ejs 文件,您可以从这里直接回复

      res.render('home', {});
    

    您应该从here 查看 Express static() 并了解如何提供文件

    【讨论】:

    • 我肯定会对此进行调查,但要快速提出一个问题:我尝试加载的框架可能是 100 个 html 页面中的任何一个。我需要专门为每一个服务吗?或者只是设置他们所在的文件夹?
    • 好吧,如果您在 .ejs 文件中假设有 100 个 iframe,您应该将文件名列表传递给将在 .ejs 文件中使用的渲染文件。像这样:res.render('template.ejs',{list: listOfFilePath}) 并在 .ejs 文件中为每个 listOfFilePath 执行一个 foreach 并为每个渲染一个 iframe。
    • 并不是说我有 100 个 iframe 可以在 ejs 中显示,而是 iframe 可能是 100 个不同的 iframe 之一。用户可以单击一个列表,根据 li 的值,iframe 会加载该项目的 html。我现在正在寻找static()
    【解决方案3】:

    唯一可行的方法是从地址“localhost:3000/index.html”中删除“.html”。

    【讨论】:

    猜你喜欢
    • 2018-01-24
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2017-01-24
    • 2022-01-07
    相关资源
    最近更新 更多