我正在使用Connect /
Express.js构建Node.js应用,我想在将其转发到原始渲染功能之前拦截res.render(view,option)函数以运行一些代码。
app.get('/someUrl', function(req, res) {
res.render = function(view, options, callback) {
view = 'testViews/' + view;
res.prototype.render(view, options, callback);
};
res.render('index', { title: 'Hello world' });
});
它看起来像一个人为的示例,但确实适合我正在构建的总体框架。
我对JavaScript的OOP和原型继承的了解有点薄弱。我该怎么做?
更新: 经过一些试验,我想到了以下内容:
app.get('/someUrl', function(req, res) {
var response = {};
response.prototype = res;
response.render = function(view, opts, fn, parent, sub){
view = 'testViews/' + view;
this.prototype.render(view, opts, fn, parent, sub);
};
response.render('index', { title: 'Hello world' });
});
它似乎有效。当我为每个请求创建一个新的响应包装对象时,不确定是否是最好的解决方案,这会成为问题吗?
老问题,但发现自己在问同样的事情。如何截取res渲染?现在使用express 4.0x。
您可以使用/编写中间件。起初,这个概念对我来说有点令人生畏,但经过阅读后,它变得更有意义了。只是对于某些阅读本文的人来说,重写res.render的动机是提供全局视图变量。我希望session
在所有模板中都可用,而不必在每个res对象中都键入它。
基本的中间件格式是。
app.use( function( req, res, next ) {
//....
next();
} );
下一个参数和函数调用对于执行至关重要。next
是回调函数,允许多个中间件在不阻塞的情况下完成其任务。有关更好的解释,请点击此处
然后可以用来覆盖渲染逻辑
app.use( function( req, res, next ) {
// grab reference of render
var _render = res.render;
// override logic
res.render = function( view, options, fn ) {
// do some custom logic
_.extend( options, {session: true} );
// continue with original render
_render.call( this, view, options, fn );
}
next();
} );
我已经使用express 3.0.6测试了此代码。它应该可以与4.x一起正常工作。您还可以使用覆盖特定的URL组合
app.use( '/myspcificurl', function( req, res, next ) {...} );
拦截文件 bp CreateFileA 创建或打开文件 (32位) bp OpenFile 打开文件 (32位) bp ReadFile 读文件 (32位) bp WriteFile 写文件 (32位) bp GetPrivateProfileStringA (ini文件)
拦截时间 bp GetLocalTime 获取本地时间 bp GetSystemTime 获取系统时间 bp GetFileTime 获取文件时间 bp GetTickCount 获得自系统成功启动以来所经历的毫秒数 bp GetCurrentTime 获取当前时间(16位) bp SetTimer 创建定时器 bp TimerProc 定时器超时回调函数
拦截窗口 bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本
拦截注册表 bp RegOpenKey(A) 打开子健 bp RegOpenKeyEx 打开子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健 bp RegSetValue(A) 设置子健 bp RegSetValueEx(A) 设置子健
拦截消息框 bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框
拦截驱动器 bp GetDriveTypeA 获取磁盘驱动器类型 bp GetLogicalDrives 获取逻辑驱动器符号 bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径