我正在处理的nodejs应用程序是使用express和 路由中间件。我正在添加某种许可功能 此应用程序,它会定期检查是否到期。
发现它过期后,会发出授权失败事件 陷入事件处理程序。我想重定向或打开一个新页面 在事件处理程序中。
我无权访问事件处理程序中的响应对象。 那么在这种情况下我如何重定向到另一个页面?
//Start of the code
var app = express();
//view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
//Deleted the code to keep it minimal
app.use('/', routes);
app.use('/sensor', sensorPage);
app.use('/export', exportPage);
app.use('/exportsensormetrics', exportSensorMetricsPage);
//Error Handling
app.use(function(req, res, next)
{
var err = new Error('Not Found');
err.status = 404;
next(err);
});
//The product key authorise() function periodically checks for expiry
var authutils = require('./authutils.js');
authutils.authorise();
//This is the Event Handler
authutils.authEvent.on('authorisation', function(data)
{
if(data == 'passed')
{
utils.dump("authutils::authEvent::on: Authorisation Passed");
}
else if(data == 'failed')
{
//Auth failed
//I want to redirect from here and open page which says expired
//Can I redirect from here?
}
});
答案 0 :(得分:0)
了解如何使用Express的最佳方式 - 它正式阅读docs。
检查许可中间件
function checkLicense(req, res, next) {
if (*check*)
next(); // move to sensorPage
else
next(new Error('License exiped')); // move to first registered error-middlware
}
将此中间件分配给应用程序
app.use(checkLicense); // if you want check all request
...
app.use('/sensor', checkLicense, sensorPage); // if you need check only specific route
错误中间件必须有第一个参数错误
app.use(function(err, req, res, next) {...});