0

たとえば、次のシナリオを考えてみましょう。顧客にエントリポイントのURL(のようなものhttps://our.server/customer-name/entry-point.js)を提供して、顧客が次のように書くだけでページに製品を含めることができるようにします。

<script language="Javascript" src="https://our.server/customer-name/entry-point.js"/>

彼らが私たちの製品を置きたい場所に(はい、私は知っています、これは醜い解決策ですが、私が変更できるものではありません)。

したがって、ここで問題に直面します。他のファイルをどこからロードするentry-point.jsか()をどうにかして知る必要があります。https://our.server/customer-name/したがって、答えはentry-point.js動的に生成して、たとえば

var ourcompany_ourproduct_basepath = "https://our.server/customer-name/";

これを行うための明白な方法はentry-point.js、次のように手動で作成することです。

res.write("var ourprefix_basepath = \"" + basepath.escape() + "\";");
res.write("function ourprefix_entryPoint() { /*do something*/ }");
res.write("ourprefix_entryPoint();");

ご覧のとおり、それはあまりにも悪いです。

たとえば、次のことを可能にするテンプレートエンジンはありますか?

var basepath = "https://our.server/customer-name/";
var export = {
    ourprefix_basepath: basepath.escape(),
    ourprefix_entrypoint: function() { /* do something */ }
};
templateEngine.render(export);

また

view.vw:
    ourprefix_basepath = rewrite("{#basepath}");
    function ourprefix_entrypoint() { /* do something */
    ourprefix_entrypoint();

App.js:
    templateEngine.render("view.vw", { basepath: "https://our.server/customer-name/" });

またはこのようなもの(あなたはアイデアを持っています)、それは応答ストリームに以下を書き込みます:

var ourprefix_basepath = "https://our.server/customer-name/";
function ourprefix_entrypoint() { /* do something */ };
ourprefix_entrypoint();

4

1 に答える 1

0

Node.jsはリフレクションをサポートしているようですが、どこかに明示的に記述されているかどうかはわかりません。

したがって、JSONがJSのサブセットであるという事実を利用することで、テンプレートエンジンを使用せずに次のよりクリーンなコードを作成できます。

var entrypoint = function(data) {
    /* do something with data.basepath and data.otherparam here... */
}

exports.processRequest = function(request, response) {
    var data = {
        basepath: computeBasepath(request),
        otherparam: "somevalue"
    };
    response.send("(" + entrypoint.toString() + ")(" + JSON.stringify(data) + ")");
}
于 2012-04-25T11:43:34.863 に答える