使用express.static时,NodeJS无法提供静态文件服务

8

我有一个类似以下内容的东西:

var request = require('request'),
    express = require('express');

var app = express.createServer();

var port = process.env.PORT || 8080;

app.configure(function(){
    app.set("view options", { layout: false, pretty: true });
    app.use(express.favicon());
    app.use("/public", express.static(__dirname + '/public'));
    }
);

app.listen(port);

// Routes
app.get('/', function(req, resp){
    resp.render('index.jade', {pageTitle: 'Some title'});
});

然而,当我访问例如 /public/myfile.css 时,我仍然会得到以下信息:

无法获取 /public/myfile.css 我的 index.jade 模板似乎也无法调用这些文件

为什么会这样?

3个回答

15

我认为不支持像那样提供路径:

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

尝试这个,查找你的公共文件在根目录中:

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

所以/public/myfile.css变成了/myfile.css


但是有没有一种方法来强制使用/public位仍然起作用?我的应用程序将/后面的任何内容用作主路由的参数...所以,它目前陷入了一个循环中。 - Alex
1
public目录放在你的public目录中,或在静态文件之后挂载你的路由。 - Linus Thiel
24
这个答案是错误的。app.use("/public", express.static(__dirname + '/public')); 是被支持的。 请查看 app.use 的定义:https://github.com/senchalabs/connect/blob/master/lib/proto.js#L61 其他地方出了问题。 - ibash

1
重要的是,app.use(express.static(__dirname + '/public'))语句的位置也很重要... 当我把它错误地放在一个名为./middle-conf.js的文件中时,我遇到了问题,后来该文件被导入为var configure = require('./middle-conf'),然后将express应用程序传递给configure(app)。因此,express中间件处理顺序未正确工作。

0

这个很好运行...

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

然后在您的HTML页面中像这样访问它。

<script src="/public/yourcodes.js"></script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接