В итоге я решил эту проблему, написав вспомогательную функцию, которая обертывает фактический обработчик. Это выглядит так:
function checkPage(handler: express.RequestHandler) {
return async (req: express.Request, res: express.Response, next: express.NextFunction) => {
let _write = res.write;
res.write = chunk => {
if (req.query.verbose) {
return _write.call(res, `<p>${chunk}</p>`);
} else {
return true;
}
}
try {
await handler(req, res, next);
res.write('<hr/><p style="color:green;"><b>happy</b></p>');
} catch (err) {
res.write(`<p style="color:red;">${err}</p>`);
res.write('<hr/><p style="color:red;"><b>SAD!</b></p>')
}
res.end();
}
}
Затем в моем обработчике маршрута я просто использую его так:
router.get('/foo', checkPage(async (req, res, next) => {
...
res.write('stuff');
...
}));
Я думаю, что эта тема отвечает на ваш вопрос:
Как уже упоминалось в «Программе. X», вышеуказанная ссылка больше не работает.
Краткий ответ: обратный инжиниринг кода в модели Visio UML работает с комбинацией Visio Pro 2007 и Visual Studio Team System для Software Architects 2005. Он не работает с Visio Pro 2007 и Visual Studio Team System Architecture Edition 2008. Однако Visio Pro 2007 позволяет выполнять обратный инжиниринг баз данных.
Почему ?: Возможность обратного инжиниринга кода теперь предоставляется всеми версиями Visual Studio в форме конструктора классов, где код постоянно синхронизируется с моделью.В будущем в Visual Studio Team System будут предоставлены дополнительные функции моделирования.
Очевидно, кто-то нашел обходной путь для VS2008, но использовал его на свой страх и риск. http://www.nullify.net/Article/298.aspx
Существует также статья MSDN на эту тему: http://msdn.microsoft.com/en-us/library/cc947873.aspx