3

Express3フレームワークを使用してnode.jsでWebAPIに取り組んでおり、ルーティングをのようにしたいと思います/v0.1/function

理想的には、ルーティングは、URLで指定されたメジャーバージョン番号とマイナーバージョン番号を確認することにより、指定されたバージョンモジュールを自動的にロードする必要があります。これまでの私のアプローチは次のとおりです。

app.use('/v:major.:minor', function(req) {
    return require('./v' + req.params.major + '.' +
        req.params.minor);
});

そして私の中で./v0.1/index.js

module.exports = function() {
    var express = require('express'),
        app = express();
    app.get('/test', function(req, res) {
        res.json({ success: true });
    });
    return app;
}();

今電話/v0.1/testすると、どういうわけかルート(404)と一致しませんが、問題なくapp.get('/v:major.:minor', function(req, res) { /* ... */ });動作しています。

どうすればこれを達成できますか?

4

3 に答える 3

2

私はあなたが欲しいと思いますapp.allhttp://expressjs.com/api.html#app.all

これにより、すべてのHTTP動詞がアクセス可能になり、可変ルーティングが機能します。

私はそれをテストしました、そしてそれはうまくいくようです。

コメントごとに編集

app.all('/v:major.:minor/:endpoint', function(req, res, next) {
    var version_handler = require('./v' + req.params.major + '.' + req.params.minor);
    if (!req.params.endpoint in version_handler) // endpoint_isn't supported at this version, 404
    version_handler[req.params.endpoint](req, res, next);
});
于 2013-03-05T02:04:03.710 に答える
0

を使用する必要がありますapp.param()Express APIの例から:

app.param('id', /^\d+$/);

app.get('/user/:id', function(req, res){
  res.send('user ' + req.params.id);
});

メジャー、マイナーはどちらも負でない整数であるため、URLでパラメーターの正規表現を指定する/^\d+$/必要があります。

于 2013-03-05T11:24:02.530 に答える
0

私が見つけた最も簡単な方法は、カスタムミドルウェアをチェーンすることです。

このようなもの:

app.use('/api/:version', function (req, res, next) {
    console.log('The version name is : ', req.params.version)
    req.version=req.params.version; //use this inside api router
    next() // pass control to the next handler
},api);

apiはルーターオブジェクトです

于 2017-03-16T16:15:14.320 に答える