如何处理与Node.js的CSS?

我试图使用直接的香草Node.js没有框架除教育目的所必需的。 我目前有这样的设置:

 var fs = require('fs'), jade = require('jade'); function compile(dirPath, res) { var filePath = __dirname + dirPath; fs.readFile(filePath, 'utf8', function(err, fd) { var fn = jade.compile(fd, { filename: filePath, pretty: true}); res.write(fn()); res.end(); }); } exports.compile = compile; 

在请求的页面被请求时调用,如下所示:

 var jadec = require('./jadecompile'); function start(res, postData) { res.writeHead(200, {"Content-Type": "text/html"}); var cpage = '/staticpages/index.jade', page = jadec.compile(cpage, res); } 

页面加载很好,我得到这个作为我的看法来源:

 <!DOCTYPE html> <html> <head> <title>Hello!</title> <link rel="text/css" href="assets/css/bootstrap.css"> </head> <body> <div class="hero-unit"> <p>Hello This Is A Test</p> </div> </body> </html> 

但是CSS根本不起作用,我一直试图谷歌它,但每个答案似乎使用快递或其他东西,但我想学习如何做到这一点香草尽可能,所以我的问题是,怎么可以我处理* .css以便正确加载css,当我点击查看源代码中的href链接时,它加载我的404页面,而不仅仅是css文件的纯文本。 谢谢!

请随时在https://github.com/Gacnt/Node-Tests查看回购协议

我设法解决我的问题,创build一个函数来处理静态页面,如.css或.js,如下所示:

 var http = require('http'), url = require('url'), path = require('path'); fs = require('fs'); // ADDED THIS FUNCTION HERE ----------------------------------------------------- function handleStaticPages(pathName, res) { var ext = path.extname(pathName); switch(ext) { case '.css': res.writeHead(200, {"Content-Type": "text/css"}); fs.readFile('./' + pathName, 'utf8', function(err, fd) { res.end(fd); }); console.log('Routed for Cascading Style Sheet '+ pathName +' Successfully\n'); break; case '.js': res.writeHead(200, {"Content-Type": "text/javascript"}); fs.readFile('./' + pathName, 'utf8', function(err, fd) { res.end(fd); }); console.log('Routed for Javascript '+ pathName +' Successfully\n'); break; } } // ADDED THIS FUNCTION HERE ----------------------------------------------------- function start(route, handle) { function onRequest(req, res) { var postData = "", pathName = url.parse(req.url).pathname; console.log('Request for ' + pathName + ' received.'); req.addListener('data', function(data) { postData += data; console.log('Received POST data chunk ' + postData + '.'); }); req.addListener('end', function() { var pathext = path.extname(pathName); if (pathext === '.js' || pathext === '.css') { handleStaticPages(pathName, res); } else { console.log('--> Routing only the view page'); route(handle, pathName, res, postData); } }); } http.createServer(onRequest).listen(4000); console.log('Server is now listening at: http://127.0.0.1:4000 .'); } exports.start = start; 

为了处理.css和其他静态文件,需要有一个文件stream。 而不是使用switch语句,你可以使用下面的代码。

var stream = fs.createReadStream(path); //创build文件streamstream.pipe(res); //传输文件