【问题标题】:nodejs express css and js not loadednodejs express css和js未加载
【发布时间】:2014-04-10 19:46:31
【问题描述】:

我在 nodejs 上使用 express。我加载的 html 文件没有得到 java-scripts 和 css-files。

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap 101 Template</title>

<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
     <h1>Hello, world!</h1>

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script type="" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">        </script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/bootstrap.js"></script>
</body>
</html>

这是我在 nodejs 中的表达部分:

app.get('/', function(req, res){

    console.log(req.path);

    fs.readFile('mongo_client/index.html',function (err, data){
        if(!err)
        {
            res.writeHead(200, {'Content-Type': 'text/html','Content-Length':data.length});
            res.write(data);
            res.end();
        }
        else
        {
            res.writeHead(400, {'Content-Type': 'text/html'});
            res.end("index.html not found");
        }
    });
});

唯一的 console.log 是“/”一次。甚至没有请求 css 和 js 文件。

编辑:

我使用了静态中间件,但它也不起作用:

app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res){

    fs.readFile('mongo_client/index.html',function (err, data){
        if(!err)
        {
            res.send(data);;
        }
        else
        {
            res.send("index.html not found");
        }
    });
});

因此,我将我的 js 和 css - 数据放到了 public - 文件夹中。 每次我尝试连接时,我都会下载 index.html 文件。 有没有人有一个使用 express 的简单网络服务器的工作示例?我是否必须使用文件阅读器...我认为还有另一种使用 express-middleware 的方法。

我只需要一个支持 css 和 js 的快速网络服务器的简单示例......我找不到任何基本的东西。

【问题讨论】:

  • 使用 express 你不需要 res.writeHead、res.write、res.end。只需做 res.send(data)。而在 err 情况下,只需用 console.log(err) 打印 err 看看读取文件是否有问题。
  • 你是说它甚至没有从 CDN 获取 jQuery,或者只是本地文件。你有静态文件的静态路由吗?
  • jQuery 正在加载。我没有静态路由。如果我 res.send(data) 我下载该网站。
  • 然后添加一个静态路由,比如app.use(express.static(__dirname + "/public"));

标签: node.js express


【解决方案1】:

app.get('/') 只会响应根的请求,除此之外不会响应。您的 css 和其他资产位于您的路线无法处理的 /css/bootstrap.min.css 中。

但对于 express,请使用 static 中间件为您完成所有这些工作。 http://expressjs.com/api.html#middleware

本文还解释了设置http://blog.modulus.io/nodejs-and-express-static-content

更新:示例应用

Express 能够生成支持静态的示例应用,并可选择支持 CSS 预处理器。阅读他们的指南:http://expressjs.com/guide.html,但基本步骤是全局安装 express

npm install -g express

然后使用命令行生成你应用的骨架

express --css stylus myapp

以上提供了对 Stylus 的支持。如果您愿意,可以指定更少。或者在支持基本 css 文件的情况下生成它

express myapp

然后 cd 进入 myapp 或您提供的任何名称,您可以看到它是如何完成的。

【讨论】:

  • package.json 有什么用途,我该如何使用它?为什么我在使用 res.send(data) 时要下载 index.html?
  • package.json 描述了您的节点模块/应用程序及其所有依赖项。每当您执行 npm install 时都会使用它。例如,如果你想 npm start 也可以在其中定义脚本。但除此之外,除非您分发 NPM 模块,否则它不会对您起作用。
  • 在 mac 上安装 express 命令后,我收到一条错误消息。解决方案位于:stackoverflow.com/a/23008130/700533
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多