学习节点 – Express公用文件夹不工作

所以我是新来的节点,并试图学习如何使用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'))); 应该configuration服务器响应公用文件夹下具有该资源的任何请求,如果find。 我究竟做错了什么? 有趣的是,configuration把手作为视图引擎比获取这个公用文件夹工作= D更容易

编辑:我想要请求的完整URL: http://localhost:1337/public/serveme.txt

我试过区分大小写(这应该是一个非问题),也没有工作。

我正在尝试请求的完整url: http://localhost:1337/public/serveme.txt

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

如果你只想从/public提供静态文件,你可以传递一个string作为第一个参数:

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

来自Express API参考

 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')); 

此行再次为您的公用文件夹提供服务,但在您的应用/公开url上,使以下请求无效,并且不会出现404错误。

(示例URL: http://localhost:1337/static/anythingInYourPublicFolder

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

你想加载哪些url? 你不应该在你的URL中包含“public”,所以curl -v 'http://localhost:1337/ServeMe.txt'