【问题标题】:Navigating html directories with swig templating engine?使用 swig 模板引擎导航 html 目录?
【发布时间】:2014-04-03 01:53:40
【问题描述】:

我在一个目录中有 2 个不同的目录。第一个是 views,它包含所有 swig 视图,例如 newpost.html。另一个是temp_images,其中包含butterfly.png

newpost.html我有,

<div id="image">{{post.image}}</div> <!-- this prints `butterfly.png`-->
<img src="../temp_images/{{post.image}}"></img> <!-- shows broken img link-->

Swig 打印文本,但不会显示蝴蝶。我不知道为什么,我仔细检查了 HTML。我也试过了

<img src="../temp_images/butterfly.png"></img>

这也不起作用。我使用 Swig 的方式会有问题吗?我也在使用 Node、Express、Mongo。

【问题讨论】:

    标签: html node.js mongodb express swig-template


    【解决方案1】:

    如果您使用的是 express,那么您可能应该将您的 /temp_images 目录放在 public 内,或者您设置的任何内容都可以提供静态文件。例如,在你的 app.js 中,你应该在某处有这样一行:

    app.use(express.static(path.join(__dirname, 'public'), { maxAge: 60*60*1000 }));
    

    您可以在 ConnectJS 网站上找到有关 .static 的更多信息,因为 Express 是从 Connect 获取的。 Connect.static docmaxAge 为浏览器提供了一个缓存指令,在这种情况下,文件可以保存一个小时。

    您的views 目录通常只能通过您的模板引擎访问,并且不会(不应该)直接公开用于静态下载。

    另外请注意,图像的 URL 是相对于在浏览器上显示的 URL 进行解释的,而不是相对于在服务器上呈现的文件(尽管它们可能是完全并行的结构)。我只是提到它 - 您可以查看浏览器开发人员工具的网络部分,以查看它为图像发出的确切 GET 请求。

    【讨论】:

    • 当然!!!感谢你!这是通常的工作方式吗?如果我希望客户端能够上传图片,我将它们保存到temp_images 目录中,然后使用链接? (我知道这是一个广泛的跟进)还有什么是{ maxAge: 60*60*1000 }
    • 我不确定“这通常是这样工作的方式吗?”中的“这个”是什么?但是,是的,您可以上传文件(您可能需要 formidable 之类的东西来解析文件上传。)如果您的文件的目的地在您的公共结构内的某个地方,那么您可以创建一个指向它们的链接像任何其他图像一样。您能否提供一个不同的目录和来自公共的符号链接等。请参阅 maxAge 的答案更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多