express.jsでjsdom.jsdom()を使用して、「ベース」レイアウトマークアップを使用してドキュメントを作成し、jQueryなどのクライアント側ライブラリをウィンドウにアタッチします。
この設定を1回だけ実行する必要があると便利です。
問題は、ウィンドウのドキュメントのDOMが要求されたURLに応じて変化することです。各リクエストを同じキャッシュウィンドウオブジェクトから開始して拡張する方法はありますか、それともすべてのリクエストで最初からセットアップする必要がありますか?
単純な JavaScript オブジェクト ハッシュが必要なようですね。
var cache = Object.create(null); // avoids spurious entries for `hasOwnProperty` etc.
// Incoming request happens, assume `req.url` is available...
if (req.url in cache) {
processDom(cache[req.url]);
} else {
jsdom.env(req.url, function (err, window) {
if (err) {
// handle error
return;
}
cache[req.url] = window;
processDom(cache[req.url]);
});
}
これは不可能だと思います。jsdom ビルダーを使用して新しいドキュメントを作成する場合、指定したカスタム オプションは、現在作成中のドキュメントにのみ影響します。この時点以降に作成された追加のドキュメントは、デフォルトの機能に依存します。
ただし、これらのデフォルト機能を実際に変更することはできます-それがあなたが求めているものだと思います. ドキュメントを作成する前に、今後のすべてのドキュメント用にこれらのデフォルトを変更できます。
require('jsdom').defaultDocumentFeatures = {
FetchExternalResources : ['script'],
ProcessExternalResources : false,
MutationEvents : false,
QuerySelector : false
}
各オプションの説明は、jsdom のREADMEを読むことで入手できます。