4

Node.js@0.8.15 + Express@3.0.4 + Jade@0.27.7 + Stylus@0.31.0 を実行しています。何らかの理由で次のエラーが発生します。これが何を意味するか知っている人はいますか?

変なことをしているとは思いません。これは、私がやっているときに発生しています:res.render(view, response);

Property 'visitFunction' of object #<Object> is not a function
    at Object.Compiler.visitNode (/app/node_modules/jade/lib/compiler.js:176:32)
    at Object.Compiler.visit (/app/node_modules/jade/lib/compiler.js:161:10)
    at Object.Compiler.visitBlock (/app/node_modules/jade/lib/compiler.js:253:12)
    at Object.Compiler.visitNode (/app/node_modules/jade/lib/compiler.js:176:32)
    at Object.Compiler.visit (/app/node_modules/jade/lib/compiler.js:161:10)
    at Object.Compiler.compile (/app/node_modules/jade/lib/compiler.js:78:10)
    at parse (/app/node_modules/jade/lib/jade.js:101:23)
    at Object.exports.compile (/app/node_modules/jade/lib/jade.js:163:9)
    at Object.exports.render (/app/node_modules/jade/lib/jade.js:215:17)
    at View.exports.renderFile [as engine] (/app/node_modules/jade/lib/jade.js:243:13)
4

1 に答える 1

6

そのエラーが発生する理由の 1 つは、新しいプロパティ (通常はメソッド) をObject.prototype

例:

Object.prototype.someNewMethod = function (value1, value2) {
    // ... perform some operations
    return this;
};

エクスプレス プロジェクトの問題#1033に記載されているように、新しいプロパティを追加する方法はObjectお勧めしません。代わりに、 Object.definePropertyをset toと共に使用する必要があります。enumerablefalse

で拡張Objectする例Object.defineProperty

Object.defineProperty(
    Object.prototype, 
    'someNewMethod',
    {
        writable : false,
        // Will not show up in enumerable properties (including for-in loop).
        enumerable : false, 
        configurable : false,
        value : function (value1, value2) {
            // ... perform some operations
            return this;
        }
    }
);

私はまったく同じ問題を抱えていて、 with を使用Object.definePropertyenumerable:falseて新しいプロパティを定義すると問題が解決しました。

それが役立つことを願っています。

于 2013-03-27T11:40:41.330 に答える