4

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

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

是否可以:

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

或者

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

编辑:

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

4

1 回答 1

12

您可以使用自己的中间件路由到快速应用程序。所以一个应用程序用于大多数路线,一个 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);
于 2013-04-15T21:53:40.327 回答