我有一个nodejs应用程序,我正在使用expressjs。我已经定义了我的静态目录,但是当我访问它时,它没有加载。我的快递配置是:
var app = express.createServer().listen(8001);
app.configure(function(){
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(app.router);
app.use('/public', express.static(__dirname + '/public'));
app.use(express.cookieParser());
app.use(express.session({ secret: "appsession" }));
app.use(express.errorHandler({showStack: true, dumpExceptions: true}));
app.set('views', __dirname + '/views');
app.set('view engine', 'hbs');
});
在我的/public
目录中,我有3个文件夹,css,js和img。在CSS里面我有一个style.css。当我尝试通过http://localhost:8001/public/css/style.css直接访问它时,我得到:Cannot GET /public/css/style.css
任何想法我可能做错了什么?
谢谢!
编辑:
这似乎与我如何设置路线有关。我是这样做的:
var routes = require('./routes')(db);
pp.get('/', routes.index);
然后在我的index.js
文件中,我有:
module.exports = function(db) {
return {
index: function(req, res, next) {
res.render('index');
}
}
}
我启用了错误处理,但是当我以这种方式使用路由时,它不会使用表达错误处理,但是如果我把它拿出来,它会。
答案 0 :(得分:4)
您可以按如下方式设置静态http中间件:
app.use(express.static(__dirname + '/public'));
使用url:
检索./public/css/style.css中的文件"/css/style.css"
实际请求文件时,public不是路径的一部分。
答案 1 :(得分:3)
将静态处理程序更改为:
app.use('/public/css', express.static(__dirname + '/public/css'));
然后http://localhost:8001/public/css/style.css应该得到你想要的东西
允许curl http://localhost:8001/public/css/style.css
的完整示例应用:
app.js
|-public
|-css
|-style.css
var express = require("express"),
app = express.createServer();
app.use('/public/css', express.static(__dirname + '/public/css'));
app.listen(8001);
答案 2 :(得分:0)
遇到同样的问题在这里找到答案
https://github.com/senchalabs/connect/issues/298
当您尝试使用嵌套文件时,它会丢失,
它说一年前固定在跟踪器上,但我今天尝试并且工作正常
答案 3 :(得分:0)
我明白了。
我的主机上运行了两个服务。 Django在根目录下运行该站点:http://myURL.com,然后Node运行在http://myURL.com/node
配置适用于Node中的所有文件。请求index.html文件没问题,但是当index.html请求样式表和静态文件时,请求会被Django捕获,然后才能进入Node。 Django看到了该文件并且不知道它是什么并且返回了404错误。
通过禁止Django将请求捕获到这些文件,一切正常。