【问题标题】:node.js script fails to GET static filesnode.js 脚本无法获取静态文件
【发布时间】:2013-08-09 05:53:51
【问题描述】:

我有一个带有少量容器的基本 HTML index.html,我将 bootstrapfont awesome 文件夹添加到文件的 <head> 部分。 如:

<link href="../bootstrap/css/bootstrap.css" rel="stylesheet">
<link href="../bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
<link href="font-awesome/css/font-awesome.css" rel="stylesheet">

然后,我写了一个web.js脚本,首先初始化服务器,然后添加那些包含静态文件的文件夹,这样:

var express = require('express');
var app = express();
var fs = require('fs');

var buf = fs.readFileSync("index.html");
app.use(express.logger());

app.get('/', function(request, response) {
  response.send(buf.toString());
});

app.configure(function(){
    app.use(express.static(__dirname + '/assets'));
    app.use(express.static(__dirname + '/bootstrap'));
    app.use(express.static(__dirname + '/font-awesome'));
});

var port = process.env.PORT || 8080;
app.listen(port, function() {
  console.log("Listening on " + port);
});

但是,当我转到 http://localhost:8080 时,尝试获取 bootstrap.css 等的 GET 命令会出现 404 错误。有什么帮助吗?我尝试了从 stackoverflow 获得的不同脚本,但似乎无法正确处理。 谢谢!

【问题讨论】:

    标签: html node.js express


    【解决方案1】:

    通过以这种方式初始化express.static,您告诉它在根目录之外的那些文件夹中查找任何请求的文件。

    如果您要删除路径:

    <link href="css/bootstrap.css" rel="stylesheet">
    <link href="css/bootstrap-responsive.css" rel="stylesheet">
    <link href="css/font-awesome.css" rel="stylesheet">
    

    很可能会找到您的静态资产。但是,您会感到头疼,因为任何重复的文件名都会导致第一个文件名被返回。

    相反,您可能希望将所有静态资产放在一个目录下,或者将不同的路径参数添加到您的 app.use 语句中,以使事情更有条理。

    文件布局:

    public
     |-- bootstrap
     |-- font-awesome
    

    相应的 app.use 语句(并从您的 html 路径中删除 ..):

    app.use(express.static(path.join(__dirname, 'public')); 
    

    或多个静态中间件(并从您的 html 路径中删除 ..):

    app.use('/bootstrap', express.static(path.join(__dirname, '/bootstrap')));
    app.use('/font-awesome', express.static(path.join(__dirname, '/font-awesome')));
    

    上述任何一项的 HTML 更改:

    <link href="bootstrap/css/bootstrap.css" rel="stylesheet">
    <link href="bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
    <link href="font-awesome/css/font-awesome.css" rel="stylesheet">
    

    【讨论】:

    • 这是一个很好的解释!以及使用public/ 的好建议,使它在&lt;head&gt; 中更容易组织和明确。谢谢!
    【解决方案2】:

    在 html 中尝试:

    <link href="bootstrap/css/bootstrap.css" rel="stylesheet">
    <link href="bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
    <link href="font-awesome/css/font-awesome.css" rel="stylesheet">
    

    在节点应用程序中:

    app.use('/assets', express.static(path.join(__dirname, '/assets')));
    app.use('/bootstrap', express.static(path.join(__dirname, '/bootstrap')));
    app.use('/font-awesome', express.static(path.join(__dirname, '/font-awesome')));
    

    【讨论】:

    • 非常感谢!这也很完美,我错过了use() 函数的第一个参数。太棒了!
    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2021-04-19
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    相关资源
    最近更新 更多