使用node.js和express的非绝对路径

时间:2016-02-24 21:09:41

标签: node.js express path

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

    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”

那样工作

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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