装饰restify渲染

时间:2015-08-03 03:03:43

标签: javascript node.js express decorator restify

我正试图用这段代码在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'未定义"}

1 个答案:

答案 0 :(得分:0)

您将原始render方法与全局this一起作为上下文传递。在传递时将server.router绑定为上下文:

original_render = server.router.render;

function decorate(){
...
server.router.render = newRender(original_render.bind(server.router));
...
}

更新:您将原始渲染方法的引用保留在中间件函数之外。否则会有一堆newRender调用请求增加。