所以我是节点新手,并尝试学习如何使用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
我已经尝试了区分大小写(这应该是非问题),而且也没有用。
答案 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)
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'
。