如何在路由器的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(); }
如果你有其他文件的路由,你可以通过app
或router
external.js
module.exports = function(router) { }
为什么不把你的auth
中间件放在一个单独的文件中,你可以require()
并使用app.js
和你的路由器文件?