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,但是您可以轻松地将其修改为您的特定公用文件夹。