2016-06-20 23 views
0

我有2個獨立的文件中定義的2條路線,但參數的recordId兩者的路線是一樣的:快遞:調用上app.param功能與同一對名稱的多個途徑

我期待的是: 1)每當我打電話/api/CountryMaster /:RecordId, 只有RecordByIdCtry函數應該被調用。 &

2)當我打電話/API/commonMaster /:MasterName /:的recordId, 只有RecordByIdCmn函數被調用。

但是,這兩個函數都會在JavaScript中設置的順序被調用。 即

require('../app/routes/commonMaster.server.routes.js')(app); 
    require('../app/routes/countryMaster.server.routes.js')(app); 

我怎樣才能阻止這些&確保只有一個方法被調用。

//CountryMaster.js

var ctrl = require('../../app/controllers/CountryMaster.server.ctrl.js'); 
var users = require('../../app/controllers/user.server.ctrl.js'); 
module.exports = function (app) 
{ 

    app.route('/api/CountryMaster') 
    .get(users.requiresLogin,ctrl.list) 
    .post(users.requiresLogin,ctrl.create); 


    app.route('/api/CountryMaster/:RecordId') 
    .get(ctrl.read) 
    .put(users.requiresLogin, ctrl.hasAuthorization, ctrl.update) 
    .delete(users.requiresLogin, ctrl.hasAuthorization, ctrl.delete); 

    app.param('RecordId', ctrl.RecordByIdCtry); 
} 

//CommonMaster.js

var ctrl = require('../../app/controllers/commonMaster.server.ctrl.js'); 
var users = require('../../app/controllers/user.server.ctrl.js'); 
module.exports = function (app) 
{ 
    app.route('/api/commonMaster/:MasterName') 
    .get(users.requiresLogin,ctrl.list) 
    .post(users.requiresLogin,ctrl.create); 
    app.route('/api/commonMaster/:MasterName/:RecordId') 
    .get(ctrl.read) 
    .put(users.requiresLogin, ctrl.hasAuthorization, ctrl.update) 
     .delete(users.requiresLogin, ctrl.hasAuthorization, ctrl.delete); 
    app.param('MasterName', ctrl.MasterName); 
    app.param('RecordId', ctrl.RecordByIdCmn); 
} 

我怎樣才能確保只有一個方法被調用..

回答

1

在你代碼,app始終是相同的應用程序,所以你基本上聲明兩個處理程序的相同的參數,這是不會工作。

你應該使用完全獨立的,而不是routers

// CountryMaster.js 
... 
module.exports = function(app) { 
    var router = require('express').Router(); 

    router.route('/') 
     .get(...) 
     .post(...); 

    router.route('/:RecordId') 
     .get(...) 
     .put(...) 
     .delete(...); 

    // The magic: 
    router.param('RecordId', ctrl.RecordByIdCtry); 

    // Mount the router on `/api/CountryMaster` 
    app.use('/api/CountryMaster', router); 
}; 

而對於CommonMaster.js相似。