在Express中使用* route时,从不存在的静态内容发送404头

时间:2013-12-24 20:42:51

标签: node.js express

我有这样的快递应用程序。

var express = require('express');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);

app.get('*', function(res,req) {
    req.render('index', {title: "Title"});
});

http.createServer(app).listen(app.get('port'), function () {
    console.log('Express server listening on port ' + app.get('port'));
});

由于使用app.get('*')请求使用呈现的index.ejs文件而不是错误404而不存在静态文件响应。

在路线中没有其他条件的情况下有没有办法解决它?

2 个答案:

答案 0 :(得分:1)

只需添加以下内容:

app.get(/\/(js|css|img)\/.*/, function (req, res) {
  res.send(404);
});
app.get('*')之前

。对/js的任何静态中间件尚未匹配的请求引用了不存在的文件。

答案 1 :(得分:0)

通过nginx代理解决了问题