我一直在搞乱node.js,我似乎无法正确地为我的CSS服务。以前,我把它嵌入我的HTML标签下的标题中,但现在我正在尝试学习如何将它作为一个单独的文件提供。
到目前为止,这就是我所做的。在添加服务器下的HTML加载之前,我尝试将其写入:
//This is all my main module
var http = require('http');
var router = require('./router.js');
var server = http.createServer(function (request, response) {
response.writeHead(200,{"Content-type" : "text/css"});
var fileContents = fs.readFileSync('./views/styles.css', {encoding: "utf8"}, function(err, data) {
if (!err) {
response.write(data);
} else {
console.log(err);
}
});
router.home(request, response);
router.user(request, response);
});
server.listen(3000);
我在路由器模块中调用的home函数如下所示。它的工作原理也非常好:
function home(request, response) {
//if url == "/" && GET
if (request.url === "/"){
if(request.method.toLowerCase() === "get") {
response.writeHead(200, commonHeaders);
renderer.view("header", {}, response);
renderer.view("search", {}, response);
renderer.view("footer", {}, response);
response.end();
} else {
//if url == "/" && POST
//redirect to /:username
request.on("data", function(postBody) {
var query = querystring.parse(postBody.toString());
response.writeHead(303, {"Location":"/" + query.username});
response.end();
});
}
}
}
我的所有HTML加载完全正常。如果我在chrome中使用我的开发工具,它表明我已经创建了一个带有styles.css文件的单独文件夹,但它是空的。它是如何创建我的文件的,但我的CSS没有写在那里?
我这样做是错的吗?我的HTML标题中也链接了样式表。你如何在node.js应用程序中提供CSS?我不知道为什么这不起作用。
答案 0 :(得分:3)
我的所有HTML加载完全正常。如果我在chrome中使用我的开发工具, 它表明我已经创建了一个带有styles.css文件的单独文件夹 它,但它是空的。它是如何创建我的文件的,但我的CSS不是 写在那里?
可能是因为fs.readFileSync
是同步的,但错误地为它提供了回调。试试这个:
response.writeHead(200, {'Content-type' : 'text/css'});
var fileContents = fs.readFileSync('./views/styles.css', {encoding: 'utf8'});
response.write(fileContents);
response.end();
我这样做是错的吗?我在标题中链接了一个样式表 我的HTML也是。你如何在node.js应用程序中提供CSS?
错误是一个强有力的词,但是,以这种方式手动提供静态文件不是最好的主意,它可能无法扩展。您应该做的是配置您的Web服务器以提供所有静态文件,并且仅处理Node.js中的动态内容。我不会涉及具体细节,而是在Stack Overflow上询问另一个问题,指定您正在运行的服务器以及如何使用Node.js正确配置它。或者,您可以查看一些有关如何使用NGINX服务器运行Node.js的教程 - 这应该可以让您走上更加可持续的道路。
我希望有所帮助!