我正在尝试用此代码装饰 Restify 路由器中的渲染函数...
装饰.js
module.exports = function (server) {
return function (req, res, next) {
function newRender(orig) {
return function(path, params, query) {
return "http://localhost:3000" + orig(path, params, query);
}
}
server.router.render = newRender(server.router.render);
next();
}
}
在我的 server.js 中
var restify = require("restify");
var decorate = require("./decorate");
var server = restify.createServer();
server.pre(decorate(server));
server.get({name: "get_user", path: "/users/:id"}, function(req, res){
res.send(req.params.id);
});
server.get("/decorate", function(req, res){
res.send({data: server.router.render("get_user", {id: 2})});
});
server.listen(3000);
但我只收到这个错误。请帮忙。 {“code”:“InternalError”,“message”:“无法读取未定义的属性“get_user””}
最佳答案
您正在传递原始 render
方法,并将全局 this
作为上下文。只需在传递时将 server.router
绑定(bind)为上下文即可:
original_render = server.router.render;
function decorate(){
...
server.router.render = newRender(original_render.bind(server.router));
...
}
更新:将原始渲染方法的引用保留在中间件函数之外。否则会出现一堆 newRender 调用,并且请求不断增加。
关于javascript - 装饰重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31778846/