我在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”
那样工作答案 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()
的第一次使用,因此在提供内容之前不需要检查其他任何路由。