如何在路由器的app.js中调用express 4.0中间件function?

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

这是我的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; 

显然,auth在这里没有定义。 任何人都可以告诉我如何在我的index.js路由器function中使用auth中间件function? 谢谢

我不确定你正在尝试导出。

 module.exports = app; 

在app.js中

这是一个简化的解决scheme:

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) { } 

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