node.js - 在其他路线之前提供 Assets

标签 node.js angularjs express

我正在使用 Node.js、Express 和 AngularJS 开发网络应用。

我从 public 文件夹提供我的前端 JavaScript,例如HTTP GET/lib/angular/angular.min.js 可能会返回 AngularJS JavaScript。

但是,由于我希望所有请求都由浏览器中的 Angular 路由器处理,因此我定义了一个包罗万象的路由,如下所示:

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

问题是此路由覆盖了静态 Assets 路由,在这种情况下它总是运行,即使在请求静态 Assets 时也是如此。

有没有办法告诉 Express 在自定义路由传播之前处理静态 Assets ?是否还有其他聪明的方法可以避免这个问题?

Express配置如下:

// 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 路由定义之前运行,因为我已经通过登录每个地方来检查顺序来检查它。

  • 我还可以验证 Assets 配置在删除 catch-all 路由后是否有效。

最佳答案

静态中间件应该出现在app.router和具体路由之前。

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

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

// last
app.get('/*',whatever);

关于node.js - 在其他路线之前提供 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21764155/

相关文章:

node.js - Auth0 - 如何通过 Auth0 在本地主机上使用 mongoDB

javascript - AngularJS - Controller 中的参数绑定(bind)

angularjs - 使用 Grunt 后在 Angular 项目中包含外部 JS 文件(通过 Yeoman)

javascript - Node/ express 4 : displaying errors with express-validator on ajax post

ios - 为什么 node ios_setup.js [应用程序 ID] [应用程序名称] 导致错误?

javascript - 如果使用特殊字符存储值,则使用 $regex 的 Mongoose 查找不会返回预期结果

javascript - 让 Heroku 的配置变量在 node.js 中工作

angularjs - 无需要求即可在 typescript 中导入模板

node.js - 环回组件存储 : How to convert image to thumbnail before uploading to Amazon S3

javascript - 同步功能node.js与postgresql?