テンプレートコンテキストオブジェクトを取得してレンダリングの準備をする関数を作成することをお勧めします。これらは、プレゼンター機能および/またはプレゼンターパターンと呼ばれることもあります。テンプレートをレンダリングする前に、node.jsルーティング関数からこれを使用します。この関数は、null / undefinedを空の文字列に置き換え、toString
「[Objectobject]」またはその他の不要なオブジェクトを検出して空の文字列に置き換えることもできます。このための単体テストを作成するのは簡単で、多くのテンプレートでロジックを複製する必要がなくなります。この関数は、オブジェクトグラフ全体またはオブジェクトグラフの配列を再帰的にウォークする必要があります。
また、異常に長い文字列の省略など、他の機能が必要になる場合もあります。たとえば、誰かが誤って大量のゴミをユーザーオブジェクトの「firstName」フィールドに貼り付け、これがたとえば100文字という適切な制限を超えている場合、プレゼンター関数はそれを切り捨てて省略記号を追加する可能性があります。このデータクリーンアップまたは「プレゼンテーション」タイプのロジックのもう1つの例。
それ以外の場合は<%= someObj.someProp || '' %>
、ejsテンプレートのような式が必要になり、ボイラープレートコードの重複が多く発生します。
これが最初に機能するjsfiddleの実装です(underscore.jsを使用)。
function sanitize(context) {
if (Array.isArray(context)) {
return _.map(context, sanitize);
}
_.each(context, function (value, key) {
if (value === null) {
context[key] = "";
return;
}
switch (typeof value) {
case "object":
context[key] = sanitize(value);
break;
case "number":
//No-op
break;
case "boolean":
//No-op
break;
default:
context[key] = value || ""; //handles undefined
}
});
return context;
}