20

Node.js と Express を使用して API を作成しています。私の API には、次の形式の GET メソッドがあります。

/api/v1/doSomething
/api/v1/doSomethingElse

私のコードは次のようになっています。

サーバー.js:

var app = express();
...
var routes = require('./routes')
routes.attachHandlers(app, '/api/v1')

ルート/index.js

...
module.exports.attachHandlers = function(app, context) {
    //get a list of all the other .js files in routes
    //for each route, require() it and call it myRoute
    myRoute.attachHandlers(app, context)
}

ルート/some-route.js

...
module.exports.attachHandlers = function(app, context) {
    app.get(context + '/doSomething', doSomething)
    app.get(context + '/doSomethingElse', doSomethingElse)
}
...

事実上、コンテキストパス/マウントポイントをアプリに渡しています。ただし、誰かが次のようなルートを作成すると、コンテキストが失われます。

app.get('/doFoo', foo)

API のその部分をマウントする/api/v1/doFooのではなく、 on にし/doFooます。このようにコンテキストパスを渡す必要は避けたいと思います。

app.useは、オプションのマウント パスへのミドルウェアのマウントをサポートしています。を使用して Express アプリケーション全体をマウント パスにマウントする方法について、オンラインで参照を見たことがありますapp.use。これは私がやりたいことのように思えますが、それを行う方法や、それが私の特定のユースケースに最適なソリューションであるかどうかはわかりません.

要約すると、デフォルトで app.get() ルートを特定のプレフィックスでマウントしたいと考えています。これを行う最善の方法は何ですか?

4

3 に答える 3

7

Express 3 でルートをマウントする実際の例を次に示します。

./snipe3app.js

var express = require('express');
var app = module.exports = express();

app.get('/subapp', function (req, res) {
  res.send('You are on the /sub/subapp page.');
});

./app.js

var express = require('express'),
    http = require('http'),
    subApp = require('./snipe3app'),
    app = express();

app.use(express.favicon());
app.use(express.bodyParser());
app.use(app.router);
app.use('/sub', subApp);

app.get('/', function (req, res) {
  res.send('You are on the root page');
});

http.createServer(app).listen(3000, function(){
  console.log('Express server listening on port 3000. Point browser to route /secure');
});

これを行うときは、ルートが処理される順序に注意する必要があります。

于 2013-06-18T19:43:04.223 に答える
5

Express-namespaceはこれでうまくいくと思います。

于 2013-06-18T19:00:27.220 に答える