【问题标题】:How to use nested middleware in express.js如何在 express.js 中使用嵌套中间件
【发布时间】:2015-10-14 10:48:48
【问题描述】:

我想改变我的代码的实际结构。这是我的实际代码:

//index.js
var routes = require('./routes');
var subdomain = require('express-subdomain');

//require express app with settings
var app = require('./app');

//export the application
module.exports = app;

// routes request like endusers-api.mydomain.ext/
app.use(subdomain('endusers-api', routes.apis.endusers));
// routes request like mydomain.ext/
app.use(routes.webapps.endusers);


//routes/index.js
var apis = {endusers: require("./apis/endusers")}
var webapps = {endusers: require("./webapps/endusers")}
var routes = {apis: apis,   webapps: webapps}

module.exports = routes;


//routes/apis/endusers
var express = require('express');
var route = express.Router();
var logger = require('../../lib/logger');

route.get('/', logger("endusers-api-access"), function(req, res, next) {
    res.json({
        "name" : "Endusers API"
    });
});

module.exports = route;


//routes/webapps/endusers.js
var express = require('express');
var route = express.Router();
var logger = require('../../lib/logger');

route.get('/', logger("endusers-webapp-access"), function(req, res, next) {
    res.render('endusers/index', {title: 'Homepage'});
});

module.exports = route;

现在我想把上面的代码改成这个(欢迎告诉我这是否是在 Node.js 中做事的好方法):

//index.js
var middlewares = require('./middlewares');
var app = require('./app');

module.exports = app;

//i want to change to this
app.use(middlewares.endusersApi);
app.use(middlewares.endusersWebapp);

//Stuff for creating server and listening...


//middlewares/index.js
var middlewares = {
  endusersApi : require("./apis/endusers"), 
  endusersWebapp : require("./webapps/endusers")
}

module.exports = middlewares;


//middlewares/apis/endusers.js
//TODO


//middlewares/webapps/endusers
//TODO

我应该如何写上面的TODO 部分。看起来我们需要嵌套中间件(一个中间件调用另一个中间件)。请,您的建议。

【问题讨论】:

    标签: javascript node.js express nested middleware


    【解决方案1】:

    我通过 express.Router().all() 方法找到了答案。

    //middlewares/apis/endusers.js
    var routes = require('../../routes');
    var express = require('express');
    var middleware = express.Router();
    
    middleware.all('/',subdomain('endusers-api', routes.apis.endusers));
    //the two next lines are alternatives to the line above 
    //middleware = subdomain('endusers-api', routes.apis.endusers); //can assign only one route
    //middleware.use(subdomain('endusers-api', routes.apis.endusers)); // can use many routes
    
    module.exports = middleware;
    
    
    //middlewares/webapps/endusers.js
    var routes = require('../../routes');
    var express = require('express');
    var middleware = express.Router();
    
    middleware.all('/', routes.webapps.endusers);
    //the two next lines are alternatives to the line above 
    //middleware = routes.webapps.endusers; //can assign only one route
    //middleware.use(routes.webapps.endusers); // can use many routes
    
    module.exports = middleware;

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2011-10-03
      • 2013-12-20
      • 2021-11-24
      • 2015-05-19
      • 2021-01-16
      相关资源
      最近更新 更多