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

Max*_*Max 4 middleware node.js express

我们正在创建一个单独的API应用程序,但被迫使其成为现有express.js主应用程序的一部分.

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

是否有可能

  • 在确定子域是['api']之后从主中间件堆栈中分支出来?

要么

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

编辑:

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

gen*_*nry 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);
Run Code Online (Sandbox Code Playgroud)