32

Express を使用して node.js で Web アプリを作成しています。次のようにルートを定義しました。

app.get("/firstService/:query", function(req,res){
    //trivial example
    var html = "<html><body></body></html>"; 
    res.end(html)
});

エクスプレス内からそのルートを再利用するにはどうすればよいですか?

app.get("/secondService/:query", function(req,res){
    var data = app.call("/firstService/"+query);
    //do something with the data
    res.end(data);
});

APIドキュメントには何も見つかりませんでした.「request」のような別のライブラリは使いたくないので、それは面倒です. アプリをできるだけモジュール化しようとしています。考え?

ありがとう

4

5 に答える 5

26

ゲイツが言ったことに似ていfunction(req, res){}ますが、ルートファイルに保存します。だから私は代わりにこのようなことをします:

ルート.js

var myModule = require('myModule');

app.get("/firstService/:query", function(req,res){
    var html = myModule.firstService(req.params.query);
    res.end(html)
});

app.get("/secondService/:query", function(req,res){
    var data = myModule.secondService(req.params.query);
    res.end(data);
});

次に、モジュールでロジックを次のように分割します。

myModule.js

var MyModule = function() {
    var firstService= function(queryParam) {
        var html = "<html><body></body></html>"; 
        return html;
    }

    var secondService= function(queryParam) {
        var data = firstService(queryParam);
        // do something with the data
        return data;
    }

    return {
        firstService: firstService
       ,secondService: secondService
    }
}();

module.exports = MyModule;
于 2012-10-05T04:13:37.623 に答える
16

これを別の機能に分割して、共有スポットに配置して、そこから移動できますか?

var queryHandler = require('special_query_handler'); 
// contains a method called firstService(req, res);

app.get('/firstService/:query', queryHandler.firstService);

// second app
app.get('/secondService/:query', queryHandler.secondService);

正直なところ、コールバックを の中にネストするというこのビジネス全体は、app.get(...)実際には優れた方法ではありません。すべてのコア コードを含む巨大なファイルが作成されます。

本当に必要なのは、さまざまなより適切に編成されたファイルに存在するすべてのコールバック ハンドラーを含むapp.get()andステートメントで満たされたファイルです。app.post()

于 2012-10-04T23:33:36.913 に答える
3

ルート上に多くのミドルウェアがある場合は、以下を拡散することで利益を得ることができます:

const router = express.Router();

const myMiddleware = [
    authenticationMiddleware(),
    validityCheckMiddleware(),
    myActualRequestHandler
];

router.get( "/foo", ...myMiddleware );
router.get( "/v1/foo", ...myMiddleware );
于 2016-11-14T12:08:56.750 に答える
1

run-middlewareそのためにモジュールを正確に使用できます

app.runMiddleware('/firstService/query',function(responseCode,body,headers){
     // Your code here
})

より詳しい情報:

開示:私はこのモジュールのメンテナー兼最初の開発者です。

于 2016-09-14T13:15:45.403 に答える