【问题标题】:Use non-absolute Paths with node.js and express在 node.js 中使用非绝对路径并表达
【发布时间】:2016-02-24 21:09:41
【问题描述】:

我在本地主机上运行我的节点服务器时遇到问题。 现在它只允许我用静态路径运行它:

    app.get("/", function(req, res){
        res.sendFile("/Users/name/Documents/_privat/dungeon/index.html");
    });

当然那不是我想去的地方。

我尝试了很多方法来嵌入动态路径,这是我的文件结构:

*dungeonapp
	- main.html
	- js
		--client
			---main.js (and others)
		--server
			---server.js
	- style
		--style.css

因此,如果我运行所有静态程序,我的应用程序将在 localhost 上运行,但它也不会加载我的 css 文件和 js 文件。

我哪里出错了?所有常规路径嵌入都不像“/../index.html”

【问题讨论】:

  • 我想你可能想使用express.static
  • 这是一个糟糕的目录布局,无法使用 Express 静态文件服务。您想反转您所拥有的并将main.html 等静态资源放入子目录中,这样您就可以将express.static() 指向该子目录,而不会意外地提供您的任何服务器文件。

标签: node.js express path


【解决方案1】:

Express response sendFile() 方法有第二个选项参数,您可以在其中表达路径解析的根路径。请参阅docs 了解更多信息。您可以使用{root: __dirname} 作为sendFile() 的第二个参数,并且文件路径将相对于调用sendFile() 的javascript 文件进行解析。在您的问题中指示的目录结构的情况下,server.js 上的代码将是:

app.get("/", function(req, res){
    res.sendFile("../../main.html", {root: __dirname});
});   

这样您可以将您的项目移动到任何文件夹,sendFile() 将继续工作。我认为您应该改写您的问题,因为您说的是绝对路径而不是静态路径。

【讨论】:

  • 非常感谢 yeiniel - 我改变了它。下午我会尝试不同的解决方案。感谢您迄今为止的帮助
  • 我删除了我的答案,+1
【解决方案2】:

通常您会在项目的根目录中设置两个子文件夹,一个用于服务器代码,一个用于客户端(即 Web)代码,然后您可以在服务器代码中使用 app.use(express.static('<filepath>')) 来提供静态客户端文件.

例如,在我的项目根目录中,我有 2 个文件夹,一个名为 app,一个名为 web。在主 app.js 中,我有 app.use(express.static(__dirname + '/../web/')); 提供静态内容。通常这将是app.use() 的第一次使用,因此在提供您的内容之前不需要检查任何其他路由。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2015-06-28
    • 2010-11-15
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多