Express:在具有相同段名的多个路由中调用app.param上的函数

时间:2016-06-20 11:31:41

标签: javascript node.js express

我在2个单独的文件中定义了2条路线,但两条路线的参数 RecordId 相同:

我期待的是: 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 个答案:

答案 0 :(得分: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相似。