我正试图用这段代码在restify路由器中装饰渲染功能......
decorate.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);
但我只收到此错误。请帮忙。 {"代码":"内部错误","消息":"无法读取属性' get_user'未定义"}
答案 0 :(得分:0)
您将原始render
方法与全局this
一起作为上下文传递。在传递时将server.router
绑定为上下文:
original_render = server.router.render;
function decorate(){
...
server.router.render = newRender(original_render.bind(server.router));
...
}
更新:您将原始渲染方法的引用保留在中间件函数之外。否则会有一堆newRender调用请求增加。