2014-02-13 3 views
2

Я разрабатываю веб-приложение с помощью Node.js, Express и AngularJS.Служите активам перед другими маршрутами

Я обслуживаю свой интерфейсный JavaScript из папки public, так, например, что HTTP GET /lib/angular/angular.min.js предположительно вернет JavaScript AngularJS.

Однако, как я хочу, чтобы все запросы, чтобы получить обрабатывается угловым маршрутизатором в браузере, у меня есть всеохватывающий маршрут определяется следующим образом:

app.get('/*', function(req, res) { res.send('template.jade'); }); 

проблема является то, что этот маршрут переопределяет статическая маршрутизация активов, и в этом случае он всегда запускается, даже если запрашивается статический актив.

Есть ли способ сказать Экспресс для обработки статических активов до распространения пользовательских маршрутов? Есть ли какие-нибудь другие умные способы избежать этой проблемы?

конфигурация

Экспресса выглядит следующим образом:

// Generated by CoffeeScript 1.7.1 
(function() { 
    var ExpressConfig, crypto, express, path, pkg; 
    crypto = require('crypto'); 
    express = require('express'); 
    path = require('path'); 
    pkg = require('../package'); 

    ExpressConfig = (function() { 
    function ExpressConfig() {} 

    ExpressConfig.prototype.configure = function(ENV) { 
     var APP_ROOT, app; 
     APP_ROOT = path.join(__dirname, '../'); 
     app = express(); 
     app.set('port', pkg.config.port); 
     app.set('views', APP_ROOT + 'webapp'); 
     app.set('view engine', 'jade'); 
     app.use(express.favicon()); 
     app.use(express.logger('dev')); 
     app.use(express.json()); 
     app.use(express.urlencoded()); 
     app.use(express.methodOverride()); 
     app.use(express.cookieParser(crypto.randomBytes(20).toString('hex'))); 
     app.use(express.session()); 
     app.use(app.router); 
     app.use(require('stylus').middleware(APP_ROOT + 'public')); 
     app.use(express["static"](APP_ROOT + 'public')); 
     if (ENV === 'development') { 
     app.use(express.errorHandler()); 
     } 
     return app; 
    }; 
    return ExpressConfig; 
    })(); 
    module.exports = ExpressConfig; 
}).call(this); 

//# sourceMappingURL=express-config.map 
  • я могу проверить, что конфигурация выполняется до броских всех определений маршрута, как я проверил это, войдя в каждом месте, чтобы проверить заказ.

  • Я также могу проверить, что конфигурация активов работает при удалении маршрута catch-all.

+0

Убедитесь, что линия для объявления статического промежуточного программного обеспечения является * до * этого маршрута. –

+0

Статическая конфигурация Express * выполняется до того, как будет определен пользовательский маршрут. – whirlwin

+0

Не могли бы вы отправить код, в котором определено статическое промежуточное ПО? –

ответ

4

Статическое промежуточное ПО должно появиться перед app.router и конкретным маршрутом.

// first 
app.use(express["static"](APP_ROOT + 'public')); 

// second 
app.use(app.router); 

// last 
app.get('/*',whatever); 
Смежные вопросы