学习节点 - Express公用文件夹无法正常工作

时间:2014-06-26 14:53:15

标签: node.js express static-files

所以我是节点新手,并尝试学习如何使用express库。但是,我试图找出问题的原因是我的/public文件夹中的文件似乎不是作为静态内容提供的。

这是我的代码:

var http = require('http');
var port = process.env.port || 1337;
var express = require('express');
var handlebars = require('express3-handlebars');
var path = require('path');

var application = express();

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

application.engine('handlebars', handlebars({ defaultLayout: 'main' }));

application.get('/', function(req, res){
    res.render('index.handlebars', { someProp: 3 });
});

application.listen(port);

我的目录结构:

/
  - server.js (the above referenced file)
  / Views
    - index.handlebars
    / Layouts
      - main.handlebars
  / public
    - ServeMe.txt

我的理解是application.use(express.static(path.join(__dirname, 'public')));应该配置服务器以响应具有该资源的公共文件夹下的任何请求(如果找到)。我究竟做错了什么?有趣的是,将把手配置为视图引擎比让公共文件夹工作更容易= D

编辑:我要求的完整网址: http://localhost:1337/public/serveme.txt

我已经尝试了区分大小写(这应该是非问题),而且也没有用。

3 个答案:

答案 0 :(得分:34)

  

我要求的完整网址:http://localhost:1337/public/serveme.txt

这是你的问题。您指定为静态内容的目录中的任何内容都可以直接从基本URL获得。您需要改为http://localhost:1337/serveme.txt

如果您只想提供来自/public的静态文件,您可以传递一个字符串作为第一个参数:

application.use("/public", express.static(path.join(__dirname, 'public')));

答案 1 :(得分:21)

来自Express API reference

app.use(express.static(__dirname + '/public'));

此行在您应用的根URL处为您的公用文件夹提供服务,这意味着以下请求有效且不会出现404错误。

// GET /javascripts/jquery.js // GET /style.css // GET /favicon.ico

app.use也会使用可选的第一个参数,允许您指定要在其中提供内容的请求URL。第一个参数默认为“/”,表示您的静态内容将在基本URL上提供。如果您希望静态内容不是在根级别提供,就像您当前的代码一样,请查看以下示例(再次从文档中获取)

app.use('/static', express.static(__dirname + '/public'));

此行再次为您的公用文件夹提供服务,但在您的应用/公共网址中,使以下请求无效,而不会出现404错误。

(示例网址:http://localhost:1337/static/anythingInYourPublicFolder

// GET /static/javascripts/jquery.js // GET /static/style.css // GET /static/favicon.ico

答案 2 :(得分:2)

您要加载哪些网址?你应该包括" public"在您的网址中,curl -v 'http://localhost:1337/ServeMe.txt'