所以我正在尝试学习如何使用expressJS和nodeJS,我正在遇到一个问题,当我启动服务器并加载html页面时,无法找到CSS文件(404错误)。 html页面加载正常,但是当我让服务器加载它时它没有样式。当我在没有服务器的情况下加载页面时,页面被设置为样式。这是我的快递和节点文件的代码:
var http = require('http'),
express = require('express');
app = express();
app.get('/', function(req,res){
res.sendFile(__dirname + '/index.html');
});
app.use(express.static('public'));
app.listen(3000);
css的html链接是:
<link href="public/main.css" rel="stylesheet">
文件结构是
前端(文件夹)
index.js
公共(文件夹)
我做错了什么?我用Google搜索并查看了文档但到目前为止还没有找到问题。
答案 0 :(得分:2)
您对static
绑定的工作方式做出了错误的假设。以下说明:
app.use(express.static('public'));
告诉表示&#34; /
上请求的没有明确路由绑定此应用的任何资源应通过文件系统解析;具体来说,应该在./public
目录&#34;。
因此,如果有人要求/cats.git
,并且表达式没有在您的应用中看到明确的路线绑定,那么它会检查./public
目录相对于它的位置&#39 ; s正在运行,试图找到一个名为cats.gif
的文件,如果能够找到它就返回它(如果它可以发送,则返回404)。
因此,你的文件系统中的dir与你网站的用户无关:他们只是简单地用干净的路径解决问题,所以如果你有一个你想要的文件./public/main.css
要充当静态内容,那么您的CSS链接应该是:
<link href="main.css" rel="stylesheet">
然后express会看到/main.css
的请求,它会注意到没有为它定义明确的路由,然后会尝试在静态目录中找到main.css
。它会找到./public/main.css
,然后将其作为/main.css
的回复发回。
答案 1 :(得分:0)
试试此代码
app.use(express.static(__dirname + '/public'));
HTML
<link href="main.css" rel="stylesheet">