Express.js中间件分支或多个app.routes中间件

时间:2013-04-15 19:34:31

标签: node.js express middleware

我们正在创建一个单独的API应用,但不得不将其作为现有express.js主应用的一部分。

我的问题是,如何将API身份验证放在适当的位置。我想把它变成一个中间件,后面是app.routes中间件来处理API路由。

是否可以:

  • 确定子域为['api']
  • 后,从主中间件堆栈分支出来

  • 将身份验证中间件和API app.routes中间件放在主app.routes中间件的前面? (实际上有两层app.routes中间件)

编辑:

另外,假设我使用第二个选项,是否可以将两个中间件(auth + api app.routes)作为单个中间件暴露在全局列表中?

1 个答案:

答案 0 :(得分:11)

您可以使用自己的中间件路由到快速应用。所以大多数路线都有一个应用程序,api路线也是api应用程序。

示例:http://runnable.com/UWx2MZS8trEHAACZ

var express = require('express');
var app = express();
var api = express();

app.configure(function () {
  app.use(express.static(__dirname));
});

app.get('/', function(req, res){
  res.send('Hello World');
});

app.get('/api*', api);

api.configure(function () {
  api.use(function (req, res, next) {
    process.stdout.write('checking');
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 100);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 200);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 300);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 400);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 500);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 600);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 700);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 800);
    setTimeout(process.stdout.write.bind(process.stdout, '.\n'), 900);
    setTimeout(function () {
      next();
    }, 1000);
  });
});

api.get('*', function (req, res) {
  res.send('Hello API');
});

app.listen(process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP);