【问题标题】:How to call express 4.0 middleware function in app.js from router?如何从路由器调用 app.js 中的 express 4.0 中间件函数?
【发布时间】:2014-08-19 13:50:24
【问题描述】:

我有一个中间件功能来执行 app.js(starter javascript)中的基本授权。但是其他javascript文件中有一些路由器文件。我的问题是如何在路由器中调用授权中间件功能?

这是我的 app.js:

var basicAuth = require('basic-auth');

var auth = function (req, res, next) {
  function unauthorized(res) {
    res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
    return res.send(401);
  };

  var user = basicAuth(req);

  if (!user || !user.name || !user.pass) {
    return unauthorized(res);
  };

  if (user.name === 'foo' && user.pass === 'bar') {
    return next();
  } else {
    return unauthorized(res);
  };
};

module.exports = app;

我的路由器文件 index.js:

var express = require('express');
var router = express.Router();
router.get('/', auth, function(req, res) {
    res.render('index', { title: 'Express' });
});

module.exports = router;

显然这里没有定义身份验证。谁能告诉我如何在我的 index.js 路由器功能中使用 auth 中间件功能?谢谢

【问题讨论】:

    标签: node.js express middleware


    【解决方案1】:

    我不确定您要导出的确切内容。

    module.exports = app;
    

    在 app.js 中

    这是一个简化的解决方案:

    index.js

    var express = require('express');
    var app = express();
    var auth = require('./auth');
    
    var router = express.Router();
    
    router.use(auth);  // Auth middleware is first
    
    router.get('/', function(req, res) {
      return res.send('Hello world');
    }
    
    // More routes can go here
    // require('./external')(router);
    // router.get('/route', function(req, res) {}
    
    app.use(router);
    
    app.listen(3000);
    

    auth.js

    module.exports = function(req, res, next) {
      return next();
    }
    

    如果您在其他文件中有路由,您可以传递approuter

    external.js

    module.exports = function(router) {
    
    }
    

    【讨论】:

    • 我在我的路由器 javascript 文件中添加了:var auth = require('../auth');。以及 auth.js 中的 module.exports = auth;。然后一切都很好。
    • 不错的收获。我修正了我的答案。
    【解决方案2】:

    为什么不将您的 auth 中间件放在一个单独的文件中,您可以在 require() 并从 app.js 和您的路由器文件中使用它?

    【讨论】:

    • 好主意。但是怎么做?我对表达很陌生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多