javascript - 你如何在 node.js 应用程序中提供 CSS

标签 javascript node.js

我一直在摆弄 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?我不知道为什么这不起作用。

最佳答案

All of my HTML loads perfectly fine. If I use my dev tools in chrome, it shows that I've created a separate folder with a styles.css file in it, but it's empty. How come it's creating my file, but my CSS isn't being written in there?

这可能是因为 fs.readFileSync 是同步的,但错误地为其提供了回调。试试这个:

response.writeHead(200, {'Content-type' : 'text/css'});
var fileContents = fs.readFileSync('./views/styles.css', {encoding: 'utf8'});
response.write(fileContents);
response.end();

Am I doing this all wrong? I have a stylesheet linked in the header of my HTML as well. How do you serve CSS in a node.js application?

错误是一个严重的词,但是,是的,以这种方式手动提供静态文件并不是最好的主意,它可能无法扩展。你应该做的是配置你的网络服务器来服务所有静态文件,并且只处理 Node.js 中的动态内容。我不会触及细节,但会在 Stack Overflow 上问另一个问题,指定您正在运行的服务器以及如何使用 Node.js 正确配置它。或者,您可以查找一些关于如何使用 NGINX 服务器运行 Node.js 的教程——这应该会让您走上一条更可持续的道路。

希望对您有所帮助!

关于javascript - 你如何在 node.js 应用程序中提供 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295722/

相关文章:

javascript - Bootstrap 标签输入事件示例

javascript - Webpack - sass 加载器找不到图像

node.js - NodeJs 服务器无法从互联网访问

javascript - AngularJS if 语句

javascript - 使用 Karma 在 play 2.2.x 应用程序中测试 javascript

javascript - highcharts donut 饼图中的多行文本

javascript - 如何让容器滚动到元素

node.js - 如何为当前目录以及带有 package.json 文件的子目录 npm install?

javascript - Express.js跨域 session 不保存

node.js - 无法从Docker Registry Remote API获得有效响应