ENOENT:没有这样的文件或目录,Express Middleware 的统计错误
ENOENT: no such file or directory, stat ERROR with Express Middleware
这似乎是文件路径的常见错误,但我的问题更奇怪,因为代码昨天工作正常但今天不行(我没有更改任何代码)。我的文件夹目录很简单:
-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)
导致问题的原因是什么?
根据你的情况一些相关的要点:
所有静态资产(html 文件、图像、CSS 文件、客户端脚本文件等)都应使用适当的 express.static(...)
语句。您不应该为静态资源创建单独的路由。
要使 express.static()
正常工作,您必须将所有静态资源放置在目录层次结构中,该目录层次结构仅包含本应是 public 的文件。
您的私有服务器端文件(例如 app.js
不应位于 public 目录层次结构中。他们应该在别处。
您到 express.static()
的路径不正确。
您 res.sendFile()
的路径不正确。
我建议您解决以下问题:
- 将 app.js 移出
public
目录。它需要在一个私有目录中。我建议 public
目录是 app.js 所在位置的子目录。
- 然后,
app.js
中的 express.static()
将 属性 为静态 HTML 字段提供服务。
- 然后,您可以删除
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);
这似乎是文件路径的常见错误,但我的问题更奇怪,因为代码昨天工作正常但今天不行(我没有更改任何代码)。我的文件夹目录很简单:
-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)
导致问题的原因是什么?
根据你的情况一些相关的要点:
所有静态资产(html 文件、图像、CSS 文件、客户端脚本文件等)都应使用适当的
express.static(...)
语句。您不应该为静态资源创建单独的路由。要使
express.static()
正常工作,您必须将所有静态资源放置在目录层次结构中,该目录层次结构仅包含本应是 public 的文件。您的私有服务器端文件(例如
app.js
不应位于 public 目录层次结构中。他们应该在别处。您到
express.static()
的路径不正确。您
res.sendFile()
的路径不正确。
我建议您解决以下问题:
- 将 app.js 移出
public
目录。它需要在一个私有目录中。我建议public
目录是 app.js 所在位置的子目录。 - 然后,
app.js
中的express.static()
将 属性 为静态 HTML 字段提供服务。 - 然后,您可以删除
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);