这似乎是文件路径的一个常见错误,但我的问题是一个但更奇怪,因为代码工作正常,但今天没有(我没有更改任何代码)。我的文件夹目录非常简单:
-node_modules
-public
-css
-js
control_panel.html
index.html
app.js
packages.json
我在app.js中使用Express中间件来帮助渲染文件。
var express = require("express");
var app = express();
app.use(express.static("public"));
app.get('/', function get(req, res) {
res.sendFile('/index.html');
});
app.get('/control_panel', function get(req, res) {
res.sendFile('/control_panel.html');
});
当我尝试在浏览器中打开index.html时,没有问题,一切都按预期工作。但是,当我尝试在浏览器中打开control_panel.html时,我得到Error: ENOENT: no such file or directory, stat '/control_panel.html' at Error (native)
导致问题的原因是什么?
答案 0 :(得分:2)
根据您的具体情况提出一些相关要点:
应使用适当的express.static(...)
语句自动为所有静态资产(html文件,图像,CSS文件,客户端脚本文件等)提供服务。您不应该为静态资源创建单独的路由。
要使express.static()
正常工作,您必须在目录层次结构中找到所有静态资源,该层次结构只包含要公开的文件。
您的私有服务器端文件(例如app.js
)不应位于该公共目录层次结构中。他们应该在其他地方。
您express.static()
的路径不正确。
res.sendFile()
的路径不正确。
我建议你做些什么来解决问题:
public
目录。它需要位于私人目录中。我建议public
目录是app.js所在的子目录。express.static()
中的app.js
将使用属性为您的静态HTML fiel提供服务。index.html
和control_panel.html
的两条路线,因为express.static()
应为其提供服务。这是一个可行的层次结构:
server
app.js
public
index.html
control_panel.html
而且,像这样的app.js:
var express = require("express");
var app = express();
// serve static files found in the public sub-directory automatically
app.use(express.static("public"));
app.listen(80);