我正在尝试按照https://stackoverflow.com/a/18633827/2063561的说明操作,但我仍然无法加载styles.css。
来自app.js
app.use(express.static(path.join(__dirname, 'public')));
在我的.ejs中,我尝试过这两行
<link rel="stylesheet" type="text/css" href="/css/style.css" />
<link rel="stylesheet" type="text/css" href="/public/css/style.css" />
既不加载css。我已经进入开发人员的控制台注意到类型设置为'text / html'而不是'text / css'。
我的路径看起来像
.
./app.js
./public
/css
/style.css
答案 0 :(得分:69)
在server.js文件中使用它
app.use(express.static(__dirname + '/public'));
并添加css,如
<link rel="stylesheet" type="text/css" href="css/style.css" />
不需要/之前的css
<link rel="stylesheet" type="text/css" href="/css/style.css" />
答案 1 :(得分:4)
对于 NodeJS ,我将从res.url
获取文件名,通过使用path.extname
获取文件扩展名来写文件头,创建读取流文件,并通过管道传递响应。
const http = require('http');
const fs = require('fs');
const path = require('path');
const port = process.env.PORT || 3000;
const server = http.createServer((req, res) => {
let filePath = path.join(
__dirname,
"public",
req.url === "/" ? "index.html" : req.url
);
let extName = path.extname(filePath);
let contentType = 'text/html';
switch (extName) {
case '.css':
contentType = 'text/css';
break;
case '.js':
contentType = 'text/javascript';
break;
case '.json':
contentType = 'application/json';
break;
case '.png':
contentType = 'image/png';
break;
case '.jpg':
contentType = 'image/jpg';
break;
}
console.log(`File path: ${filePath}`);
console.log(`Content-Type: ${contentType}`)
res.writeHead(200, {'Content-Type': contentType});
const readStream = fs.createReadStream(filePath);
readStream.pipe(res);
});
server.listen(port, (err) => {
if (err) {
console.log(`Error: ${err}`)
} else {
console.log(`Server listening at port ${port}...`);
}
});
答案 2 :(得分:1)
我已经按照以下步骤解决了这个问题
答案 3 :(得分:1)
在主.js文件中使用
app.use('/css',express.static(__dirname +'/css'));
在您的主要.html文件中使用
<link rel="stylesheet" type="text/css" href="css/style.css" />
出现错误的原因是因为您在__dirname之后使用逗号而不是concat +。
答案 4 :(得分:1)
1。如果不存在,请创建一个名为“ public”的新文件夹。
2。在新创建的“公共”文件夹下创建一个名为“ css”的新文件夹
3。在public / css路径下创建您的CSS文件
4。在您的html链接CSS上
<link rel="stylesheet" type="text/css" href="/css/style.css">
//请注意,href之前使用斜杠(/),并且您无需包含“ public”
5。在您的app.js上包括:
app.use(express.static('public'));
景气。它有效!
答案 5 :(得分:1)
恕我直言,使用ExpressJS回答此问题是一个肤浅的回答。在不使用任何框架或模块的情况下,我将尽我所能来回答。经常使用框架来回答这个问题的原因是,因为它消除了理解“超文本-传输-协议调用”的要求。
因此,我们现在知道什么信息正在发送到服务器,现在我们可以使用一些JavaScript将CSS请求与服务器端的html请求分开。
var http = require('http');
var url = require('url');
var fs = require('fs');
function onRequest(request, response){
if(request.headers.accept.split(',')[0] == 'text/css') {
console.log('TRUE');
fs.readFile('index.css', (err, data)=>{
response.writeHeader(200, {'Content-Type': 'text/css'});
response.write(data);
response.end();
});
}
else {
console.log('FALSE');
fs.readFile('index.html', function(err, data){
response.writeHead(200, {'Content_type': 'text/html'});
response.write(data);
response.end();
});
};
};
http.createServer(onRequest).listen(8888);
console.log('[SERVER] - Started!');
这里是我可以分开请求的一种快速示例。现在请记住,这是一个简单的示例,通常在多个服务器文件之间进行拆分,其中一些文件具有对其他文件的依赖关系,但是对于“简而言之”,这是我所能做的最好的事情。我对其进行了测试,并且效果良好。请记住,index.css和index.html可以与所需的任何html / css文件交换。
答案 6 :(得分:0)
在server.js文件中使用它
app.use(express.static('public'));
没有目录(__dirname)然后在你的项目文件夹中创建一个新文件并将其命名为public然后将所有静态文件放在其中
答案 7 :(得分:0)
如果您使用的是express.static(__dirname + 'public')
很简单,那么不要忘了在公众面前使用express.static(__dirname + '/public')
前面的斜杠或使用express.static('public')
也可以使用;
并且不要更改CSS链接中的任何内容。
答案 8 :(得分:0)
以上回复有效了一半,我不知道为什么它们不在我的机器上,但我必须执行以下操作。
/public/js/
/public
添加为第一个参数
app.use('/public',express.static('public'));
<script src="public/js/bundle.js"></script>
答案 9 :(得分:0)
我们拥有的自定义样式表是本地文件系统中的静态页面。为了让服务器提供静态文件,我们必须使用
app.use(express.static("public"));
其中
public是我们必须在根目录中创建的文件夹,并且必须具有css,images..etc等其他文件夹
目录结构如下:
然后在您的html文件中,将style.css引用为
<link type="text/css" href="css/styles.css" rel="stylesheet">
答案 10 :(得分:0)
在您的应用或server.js文件中包含以下行:
app.use(express.static('public'));
在您的index.ejs中,以下行将为您提供帮助:
<link rel="stylesheet" type="text/css" href="/css/style.css" />
我希望这对我有帮助!
答案 11 :(得分:0)
注册路线的顺序很重要。在静态文件之后注册404
路由。
正确的顺序:
app.use("/admin", admin);
...
app.use(express.static(join(__dirname, "public")));
app.use((req, res) => {
res.status(404);
res.send("404");
});
否则,不在路由中的所有内容(如css文件等)将变为404。