【问题标题】:node.js to serve web page with access to resources on node.js servernode.js 提供网页以访问 node.js 服务器上的资源
【发布时间】:2015-01-03 23:27:45
【问题描述】:

我有一个 html 页面,它引用了许多本地脚本文件,而这些脚本文件又引用了其他本地资源。本地是指 html 文件的本地。

是否可以使用 node.js 服务器方法来提供这样的网页?到目前为止,我已经能够解决,node.js 服务器可以返回 html 内容,但是当它显示在用户的浏览器中时,我无法轻易看到它如何能够引用各种脚本,因为 html 不是从服务器上的普通文件夹中提供的,而是对其周围的文件夹和资源的相对访问。

有没有办法做到这一点,或者考虑这种方法是不是很疯狂?最好把 html 和相关资源贴在标准服务器上,然后完成?

编辑:我应该解释一下,从 node.js 提供 html 的动机是我已经在从 node.js 服务器提供图像,这些图像是使用 html 将使用的相同脚本生成的。因此,用户可以通过两种方式获得相同的内容:作为 png 文件或作为网页,并且在这两种方法中,工作都是由相同的核心脚本完成的……一种具有 html 前端,另一种具有node.js 前端。因此,能够将所有代码保存在一个位置会很好,而不必复制东西并将其放在两个地方,并且当我在主要位置更新代码时必须记住在辅助位置更新代码位置。

编辑以添加文件夹结构以帮助调试(参见下面的 cmets):

mypage.html
myLibFile.js
/lib/*.js   (various js resources including jquery)
/lib/modules/*.js   (various js resources)
/lib/fonts/*  (various resources)
/themes/*.js  (various js resources)

在 mypage.html 我有:

<script type="text/javascript" src="/lib/jquery.1.9.1.min.js"></script>
<script type="text/javascript" src="/lib/libFile.js"></script>
<script type="text/javascript" src="/lib/modules/modFile.js"></script>
<link href="/lib/fonts/awesomefont.css" rel="stylesheet">
<script type="text/javascript" src="/myLibFile.js"></script>

<script type="text/javascript">
    $(function () { // On DOM ready...
        // ... code ...
    });
</script>

在我的 node.js 中,我尝试将 express 设置如下:

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

【问题讨论】:

    标签: javascript html node.js server


    【解决方案1】:

    当然,当使用您自己定制的 nodejs 服务器时,您的相对路径将起作用,该服务器可以提供文件、.html .css .js 等。

    我假设您有某种 public 文件夹,您可以在其中提供资产。如果您不使用任何特殊的路由魔法,而只是参考公用文件夹的结构,那么 HTML 中的相对路径将起作用。

    <link rel="stylesheet" href="styles/main.css">
    

    上面的代码可能会加载类似:public/styles/main.css

    【讨论】:

    • 感谢您的建议。假设我有一个 node.js 服务器在 example.com/test 监听(我使用 express 模块作为我的节点服务器的基础)。节点服务器读取本地 html 文件并将其作为响应返回。所以说在 html 我有 - 我如何在 node.js 服务器上指定一个公用文件夹,以便“coolstuff.js”会被正确阅读吗?
    • 我没有使用 express.js 进行开发,但这是我在浏览互联网时发现的:app.use(express.static(process.cwd() + '/public'));你基本上应该指定一个静态文件夹来提供你的文件,你能告诉我你的项目的文件结构吗?如果您已经从应用中提供了 .html 文件,您可以尝试将其他资源(例如 css/js)放在 html 文件旁边的同一文件夹中。
    • OK 看起来很有希望。谢谢。我将进一步深入研究。
    • 您是否知道在从节点服务器上的静态位置提供 html 文件时是否存在任何问题,其中 html 文件依赖于 jquery?我已经在我的网页上尝试过这个,它可以从普通的远程服务器上很好地提供,但是从 node.js 服务器中的静态文件夹中,它没有按应有的方式加载。
    • 对于进一步的“调试”,您应该向我们提供您的文件夹结构,以及您的问题的更多描述性信息。例如,你做了什么动作,你期望发生什么 + 实际上发生了什么。
    猜你喜欢
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2015-08-07
    • 2012-12-11
    相关资源
    最近更新 更多