Node.js 学习节点-Express公用文件夹不工作

Node.js 学习节点-Express公用文件夹不工作,node.js,express,static-files,Node.js,Express,Static Files,因此,我对node还不熟悉,正在尝试学习如何使用express库。然而,我试图弄清楚的问题是,为什么我的/public文件夹中的文件似乎不作为静态内容使用 这是我的密码: var http = require('http'); var port = process.env.port || 1337; var express = require('express'); var handlebars = require('express3-handlebars'); var path = requi

因此,我对node还不熟悉,正在尝试学习如何使用
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(uu dirname,'public'))
应该配置服务器,以便在找到该资源时使用该资源响应公用文件夹下的任何请求。我做错了什么?有趣的是,将Handlebar配置为视图引擎比让这个公用文件夹工作起来更容易

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

我试过区分大小写(这应该不是问题),但也不起作用

我试图请求的完整URL:
http://localhost:1337/public/serveme.txt

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

如果只希望为
/public
中的静态文件提供服务,可以传递字符串作为第一个参数:

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

您正在尝试加载哪些URL?您应该在URL中包含“public”,因此
curl-v'http://localhost:1337/ServeMe.txt“

这一行在应用程序的根URL处为您的公用文件夹提供服务,这意味着以下请求是有效的,不会给出404错误

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

app.use还接受一个可选的第一个参数,该参数允许您指定要在其中提供内容的请求URL。第一个参数默认为“/”,这意味着您的静态内容将在基本URL上提供。如果您希望静态内容不在根级别提供,就像您当前的代码一样,请查看以下示例(同样取自文档)

这一行再次服务于您的公用文件夹,但位于您的应用程序的/静态URL,使以下请求在没有404错误的情况下有效

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

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

是否有错误消息?它只是404,因此服务器似乎不知道如何处理请求。啊,这很有趣。有没有办法强制包含公共url?我想这只是我必须习惯的另一个惯例。@Tejs-我已经用一种方法更新了我的答案。您可以传递字符串作为任何中间件函数的第一个参数,如果请求的URL不匹配,该函数将不会运行。
app.use(express.static(__dirname + '/public'));
app.use('/static', express.static(__dirname + '/public'));