在 express.js 中使用 jsdom.jsdom() 我创建了一个带有一些“基本”布局标记的文档,并将一些客户端库(例如 jQuery)附加到它的窗口。
只需要进行一次此设置会很好。
问题是窗口文档的 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可以获得每个选项的解释。