1

我正在为一个应用程序使用 jsdom node.js 模块,该应用程序执行一些网络抓取以获取它需要的一些数据。当我在本地运行时,这非常有效。

但是,当我将应用程序推送到 cloudfoundry 时,它会崩溃。日志如下:

====> /logs/stderr.log <====

/var/vcap/data/dea/apps/caretogethersandbox-0-8b20af9255bbf552d0f490cb60d0df55/app/node_modules/jsdom/lib/jsdom.js:171 个特征 = JSON.parse(JSON.stringify(window.document.implementation._fea ^TypeError:无法读取未定义的属性“实现”

我在这里缺少什么吗?我很困惑。我知道我编写的代码工作正常,这似乎是模块和 cloudfoundry 之间的问题。

4

2 回答 2

2

我能够很容易地重现这个问题。似乎 jsdom 依赖于一个名为 Contextify ( https://github.com/brianmcd/contextify ) 的本地编译库,并且从我可以收集到的内容中也有一些与 Python 的绑定。Cloud Foundry 目前不支持这些。Github上有一个关于这个问题的类似问题;

https://github.com/tmpvar/jsdom/issues/436

撰写本文时的最后一篇文章建议使用两个 100% JS 库,称为 Domino 和 Zepto Node,它们可能值得一试。

于 2012-08-23T06:31:12.693 回答
1

只有你发布的内容几乎不可能给你一个直接的答案。

但我有几个建议。

  1. 您的环境变量在生产中的工作方式与在开发中的工作方式不同。

  2. jsdom 依赖于通常从外部加载的 jquery。也许 jquery 没有正确加载。

你听说过cheerio吗?它是 jsdom 的替代方案,它实现了 jquery 的一个子集,并且不需要从外部加载 jquery。这比 jsdom 快得多。

您可以观看作者创建的这个视频,用于介绍 Cheerio 并了解更多它的好处。

使用Cheerio github 页面上的示例代码并将其上传到您的 cloudfoundry 帐户,以查看是否一切正常。然后你可以决定天气切换到cheerio。

于 2012-08-23T02:36:16.460 回答