【问题标题】:Node.js "Cannot read property 'userAgent' of undefined" on requireNode.js“无法读取未定义的属性'userAgent'”
【发布时间】:2012-05-12 00:27:36
【问题描述】:

Edit4:我现在很高兴在 Linux 中进行这项工作,因为我已经了解了放置位置以及如何为项目复制文件的其他问题。继续并接受答案并关闭它。

Edit3:由于 Len 的 cmets,我目前有一个解决方法,即使用我的 Debian VM 而不是 Windows。但是,我暂时不回答这个问题,看看是否有人可以解决 Windows 问题。

我一直在慢慢地在我的 Windows 7 桌面上安装 Node.js。我说得很慢,因为每一步都有问题,从 PATH 变量没有更新,到不知道我需要 python,再到 npm 权限错误。无论如何,在 Google 的帮助下,我已经解决了很多问题,但这让我完全感到困惑:

D:\Website\Webscraper>node webscrape.js

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
TypeError: Cannot read property 'userAgent' of undefined
    at D:\Website\Webscraper\node_modules\jquery\lib\node-jquery.js:87:23
    at D:\Website\Webscraper\node_modules\jquery\lib\node-jquery.js:995:2
    at create (D:\Website\Webscraper\node_modules\jquery\lib\node-jquery.js:9416:2)
    at D:\Website\Webscraper\node_modules\jquery\lib\node-jquery.js:9422:18
    at Object.<anonymous> (D:\Website\Webscraper\node_modules\jquery\lib\node-jquery.js:9424:1)
    at Module._compile (module.js:441:26)
    at Object..js (module.js:459:10)
    at Module.load (module.js:348:31)
    at Function._load (module.js:308:12)
    at Module.require (module.js:354:17)

这是我的完整代码:

var $ = require('jquery');

在关于缺少软件包的无尽错误之后,我通过 npm 在本地安装了以下内容:

  • jquery@1.7.2
  • htmlparser@1.7.6
  • jsdom@0.2.14
  • cssom@0.2.3
  • request@2.9.202
  • xmlhttprequest@1.3.0
  • location@0.0.1
  • navigator@1.0.1

但是由于我现在得到的错误是一个非常通用的 JS 错误,并且专门搜索它已经获得了 0 个谷歌点击,我很难过。我想做的就是在 node.js 中运行 jquery。这应该需要大约 3 行输入。我到底错过了什么?

编辑:查看 navigator.userAgent 的结果,看起来我下载的 navigator 包是为了解决这个问题,但它不起作用。我还尝试在 jquery 模块中编辑 node-jquery,用一个设置我自己的 userAgent 的全局变量“navigator”以及其他一些东西来覆盖全局变量,但甚至没有改变错误,更不用说解决问题了。

Edit2:(已针对 Debian 修复,请参阅 Len 的回答下的 cmets)

【问题讨论】:

  • 嗯,这就是你要找的线路,希望对你有帮助:github.com/coolaj86/node-jquery/blob/master/lib/…
  • 有趣...看起来 jquery 需要一个浏览器 userAgent,但我在 node.js 中运行它,所以没有。不应该有一个包装器来解决这个问题吗? 再次使用谷歌搜索
  • github.com/mikeal/spider 这是一个运行在 nodejs 上并使用 jQuery 获取页面内容的网络蜘蛛。我已经成功地将它用于一些小东西,并在其上构建了另一个需要一些调整的项目,但它提供了基础知识,应该可以帮助你找到解决错误的方法,或者为似乎是一个网络爬虫项目的基础。
  • 嗯,看起来您没有使用 jquery 包,而是手动包含它。这可能是解决问题的一种方法,但我更愿意使用标准包。无论如何,感谢您发布您的项目,一旦我建立并运行基础,我一定会看看它以获得一般想法!

标签: node.js require


【解决方案1】:

为我工作!

aeka ~/test$ cat webscrape.js 
var $ = require('jquery');
aeka ~/test$ node webscrape.js 
aeka ~/test$ echo $?
0
aeka ~/test$ npm ls
/Users/annelicuss/test
├─┬ jquery@1.7.2 
│ ├── htmlparser@1.7.6 
│ ├─┬ jsdom@0.2.14 
│ │ ├─┬ contextify@0.1.2 
│ │ │ └── bindings@0.3.0 
│ │ ├── cssom@0.2.3 
│ │ └── request@2.9.202 
│ └── xmlhttprequest@1.3.0 
└── navigator@1.0.1 

aeka ~/test$ 

【讨论】:

  • 你的包比我多,我想知道这是否是问题所在......我尝试安装 contextify 并得到这个:npm ERR! contextify@0.1.2 安装:node-gyp rebuild npm ERR! cmd "/c" "node-gyp rebuild" 失败,出现 1 个 npm 错误! npm 错误!在 contextify@0.1.2 安装脚本中失败。 npm 错误!这很可能是 contextify 包 npm ERR 的问题!不是 npm 本身。 npm 错误!告诉作者这在您的系统上失败:npm ERR!节点gyp重建
  • 你能发布你用来安装包的命令吗?
  • 你不应该直接安装它们; contextify 作为安装 jquery 的依赖项自动安装(因此显示在下方)。如果直接安装的话,不会在jquery自己的node_modules下,所以无论如何也无济于事。看起来contextify 在您的机器上的构建过程有问题。您可能需要apt-get install build-essential
  • 哇,“39 个已升级,29 个新安装,4 个要删除,337 个未升级”。所以难怪那里需要一些东西!它还破坏了我在扩展范围内的 ASCII 图形 (ââ€jquery@1.7.2),但目前这是一个小问题。知道如何解决 Windows 的类似问题吗?
  • 哈哈,哇!不幸的是,我不是 Windows 爱好者,但我想知道这是否是相同的根本原因? (缺少编译器)我不确定你如何说服 npm 甚至在 Win 上使用特定的编译器……:|
猜你喜欢
  • 2017-10-13
  • 2016-05-09
  • 2021-12-05
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
相关资源
最近更新 更多