Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的Express服务器对除index.html之外的所有文件都响应404?_Javascript_Node.js_Express_Webserver - Fatal编程技术网

Javascript 为什么我的Express服务器对除index.html之外的所有文件都响应404?

Javascript 为什么我的Express服务器对除index.html之外的所有文件都响应404?,javascript,node.js,express,webserver,Javascript,Node.js,Express,Webserver,我正在使用Express学习Node.js,以便运行一个小服务器进行学习。对于链接到我的index.html文件(例如.css、.js和图像文件)中的文件的所有请求,我将收到响应代码404 我用来发送的代码index.html: routes.get('/', (req, res) => { res.sendFile(path.join(__dirname, "/clientSide/index.html")); }) 如果改为更改整个文件夹的路径: routes.get('/'

我正在使用Express学习Node.js,以便运行一个小服务器进行学习。对于链接到我的
index.html
文件(例如
.css
.js
和图像文件)中的文件的所有请求,我将收到响应代码404

我用来发送的代码
index.html

routes.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, "/clientSide/index.html"));
})
如果改为更改整个文件夹的路径:

routes.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, "/clientSide"));
})
我在浏览器中获得了从硬盘到文件夹的路径,但我仍然无法以这种方式查看文件

clientSide
文件夹包含
index.html
app.js
style.css
,以及2或3个图像,都在同一文件夹中。我一个也看不到

我更改了文件名和文件夹名,并检查了大小写,但没有结果

已解决

我在使用app.use(express.static(path.join(uu dirname,“static/”)))

使用
app=express()

这不起作用,但使用
路由。使用
而不是
app。使用
,而
routes=express.Router(),就是解决这个问题的方法


当您编写以下代码时,第一个代码段中的结尾

routes.get(“/”,(req,res)=>{
res.sendFile(path.join(uu dirname,“/clientSide/index.html”);
})
您为路由
/
的请求定义了一个新的中间件函数;这就是
routes.get('/',…)
所做的。假设服务器在端口3000上运行,路由
/
映射到
http://127.0.0.1:3000/
。对于那个URL,而不是其他URL,Express执行您提供的函数,该函数使用文件
clientSide/index.html
进行回复。因此,当浏览器请求
http://127.0.0.1:3000/
,Express响应正确

但是您没有提到其他文件,例如
http://127.0.0.1:3000/style.css
,这将是route
/style.css
。您尚未为该路由定义任何中间件。因此,Express在不知道该做什么的情况下,默认情况下会以404和错误消息进行响应。因此,当浏览器尝试加载
http://127.0.0.1:3000/style.css
获取
index.html
中引用的资源时,样式表无法加载

您的第二个代码片段无法修复任何问题。这真的让事情变得更糟,因为
res.sendFile()
无法发送文件夹(这怎么行?),并且会产生错误。您还没有定义除
/
之外的路由,现在所有文件都无法访问

要真正解决这个问题,从理论上讲,您可以为每个文件繁琐地定义一个路由,或者更聪明地使用一个文件定义一个路由。但使用Express服务静态文件夹是一个已解决的问题。您只需将所有代码替换为以下代码即可将工作卸载到:

routes.use(express.static(path.join)(“clientSide/”));

更进一步说,静态文件服务器不需要Express或Node.js。尝试对于简单的网页,你根本不需要服务器;只需双击
index.html
,让浏览器打开它。

在您的第一个代码段中,当您编写以下代码时:

routes.get(“/”,(req,res)=>{
res.sendFile(path.join(uu dirname,“/clientSide/index.html”);
})
您为路由
/
的请求定义了一个新的中间件函数;这就是
routes.get('/',…)
所做的。假设服务器在端口3000上运行,路由
/
映射到
http://127.0.0.1:3000/
。对于那个URL,而不是其他URL,Express执行您提供的函数,该函数使用文件
clientSide/index.html
进行回复。因此,当浏览器请求
http://127.0.0.1:3000/
,Express响应正确

但是您没有提到其他文件,例如
http://127.0.0.1:3000/style.css
,这将是route
/style.css
。您尚未为该路由定义任何中间件。因此,Express在不知道该做什么的情况下,默认情况下会以404和错误消息进行响应。因此,当浏览器尝试加载
http://127.0.0.1:3000/style.css
获取
index.html
中引用的资源时,样式表无法加载

您的第二个代码片段无法修复任何问题。这真的让事情变得更糟,因为
res.sendFile()
无法发送文件夹(这怎么行?),并且会产生错误。您还没有定义除
/
之外的路由,现在所有文件都无法访问

要真正解决这个问题,从理论上讲,您可以为每个文件繁琐地定义一个路由,或者更聪明地使用一个文件定义一个路由。但使用Express服务静态文件夹是一个已解决的问题。您只需将所有代码替换为以下代码即可将工作卸载到:

routes.use(express.static(path.join)(“clientSide/”));

更进一步说,静态文件服务器不需要Express或Node.js。尝试对于简单的网页,你根本不需要服务器;只需双击
index.html
并让浏览器打开它。

据我所知,您尝试使用静态内容。那么为什么不尝试使用express.static呢?让我们这样说吧,正如我所理解的那样,您尝试使用静态内容。那么为什么不尝试使用express.static呢?就像上面描述的,是的,这是我第二次尝试做整个文件夹的静态。这样我就得到了“不能得到/{我在破折号后面放的任何东西}”。我会试着为每个人做路线component@NehuenTupacCoveloDuran您可以通过删除所有路由定义(
routes.get(…)
)使其在没有为每个文件定义显式路由的情况下工作(这只是一个假设的示例;这是一种非常糟糕的方法,您实际上不应该这样做)用我提供的那一行代码替换它。它在我的机器上工作。我真是个笨蛋,哈哈,我忘了