我有一个中间件功能来执行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中间件功能?感谢
答案 0 :(得分:3)
我不确定您要尝试导出的是什么。
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();
}
如果您在其他文件中有路线,则可以传递app
或router
<强> external.js 强>
module.exports = function(router) {
}
答案 1 :(得分:0)
为什么不将auth
中间件放在一个单独的文件中,您可以require()
使用app.js
和路由器文件?