4

別の API アプリを作成していますが、既存の express.js メイン アプリの一部にする必要があります。

私の質問は、API 認証を適切な場所に配置する方法です。私はそれをミドルウェアにしたいのですが、その背後にapp.routesは API ルートを処理するミドルウェアがあります。

次のいずれかが可能ですか?

  • サブドメインが['api']?

また

  • 認証ミドルウェアと APIapp.routesミドルウェアをメインapp.routesミドルウェアの前に配置しますか? (事実上、app.routesミドルウェアの 2 つのレイヤーがあります)

編集:

また、2 番目のオプションを使用するとしますapp.routes。グローバル リストで 2 つのミドルウェア (auth + api) を 1 つのミドルウェアとして公開することは可能ですか?

4

1 に答える 1

12

独自のミドルウェアを使用して、高速アプリにルーティングできます。したがって、ほとんどのルートには 1 つのアプリがあり、API ルートには 1 つの 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 に答える