Nodejs:服务的HTML页面没有链接到CSS
我有以下的基本脚本运行在nodejs提供一个HTML文件与关联的CSS样式表:
var http = require('http'); var fs = require('fs'); var path = require('path'); var serverPort = 8080; var server = http.createServer(function(request, response) { console.log('request starting ...'); var extname = path.extname(request.url); var contentType = 'text/html'; switch (extname) { case '.js': contentType = 'text/javascript'; break; case '.css': contentType = 'text/css'; break; } fs.readFile('js/EmailDisplay/htm/index.html', function(error, content) { if (error) { console.log(error); response.writeHead(500); response.end(); } else { console.log(contentType); response.writeHead(200, {'Content-Type': contentType}); response.end(content,'utf-8'); } }); }); server.listen(serverPort); console.log('Server running at localhost:' + serverPort +"/");
如果我在Firefox(文件 – >打开文件)中打开文件,它正确渲染。 如果我去本地主机:8080索引页面被提供,但没有适用于它的样式。 为什么? fs.readFile块中的console.log显示我正在读取这两个文件。
PS – 我知道有一些软件包会让我盲目地做这个(例如'连接'),但是我试图去理解在走这条路线之前究竟发生了什么。
问题可能在于这一行:
fs.readFile('js/EmailDisplay/htm/index.html', function(error, content) {
您正在阅读并返回到客户端的相同的HTML文件,即使.js
和.css
请求。
您可能应该在您之前在代码中使用的开关中设置沿其内容types的文件path。
我遇到了与nodejs相同的问题,并表示。 请参阅下面的示例server.js
var express= require("express"); var app= express(); app.get("/", function(request, response) { response.sendFile("testing.html", {root: "."}); }); app.listen(8080);
可以通过添加以下行来添加静态内容:
app.use(express.static("foundation-5.4.6", {index: false}));
这使用express.static 。 在我的情况下,我从Foundation框架提供静态css和js,但是您可以轻松地将其修改为您的特定公用文件夹。