nodeStack.getFunctionName()返回null

时间:2015-10-30 20:00:18

标签: javascript node.js

我有以下node.js代码:

var path = require('path');
var nodeStack = require('stack-trace');
var controller = (function () {
    function controller() {
    }
    controller.prototype.render = function (res, model, view) {
        var stack = nodeStack.get();
        var frame = stack[1];
        var functionName = frame.getFunctionName().split(/controller\./i);
        if (functionName.length < 2) {
            functionName = frame.getFunctionName().split(/(controller|\./i);
        }
        if (!view) {
            view = functionName[1];
            var dotidx = view.indexOf('.');
            if (dotidx > -1) {
                view = view.substring(0, dotidx);
            }
        }
        if (!model) {
            model = {};
        }
        var base = '';
        if (res.locals.basePath) {
            base = res.locals.basePath;
        }
        var cls = functionName[0];
        res.render(path.join(base, cls, view), model);
    };
    return controller;
})();
module.exports = controller;

代码应该允许我根据方法渲染视图,匹配文件应该自动找到。

一切正常,只有一种情况frame.getFunctionName()返回null。

子类的代码如下:

customerController.prototype.add = function (req, res) {
    var _this = this;
    somepromise.then(function (provider) {
        return provider.getCP();
    }).then(function (cp) {
        controller.prototype.render.call(_this, res, { title: 'add customer', contactpersons: cp });
    }, function (err) {
        controller.prototype.render.call(_this, res, { title: 'add customer' });
    });
};

一个不起作用的代码。

customerController.prototype.details = function (req, res) {
    var _this = this;
    somepromise.then(function (provider) {
        return provider.getCustomerById(req.param('id'));
    }).then(function (customer) {
        _super.prototype.render.call(_this, res, { title: 'customer details', customer: customer });
    }, function (err) {
        res.status(404).send(err);
    });
};

该代码适用于除一个以外的所有方法。你知道为什么吗?

备注:代码是从TypeScript

编译的

0 个答案:

没有答案