【问题标题】:Node.js with ExpressJS error: Cannot read property 'prototype' of undefined带有 ExpressJS 错误的 Node.js:无法读取未定义的属性“原型”
【发布时间】:2013-03-24 08:04:01
【问题描述】:

运行 node.js v0.10.2 和 express v3.1.1(此时最新)并收到此错误:

/root/dmr-addresses/node_modules/jquery/lib/node-jquery.js:10
window.XMLHttpRequest.prototype.withCredentials = false;
                     ^
TypeError: Cannot read property 'prototype' of undefined
  at create (/root/dmr-addresses/node_modules/jquery/lib/node-jquery.js:10:26)
  at /root/dmr-addresses/node_modules/jquery/lib/node-jquery.js:9503:18
  at Object.<anonymous> (/root/dmr-addresses/node_modules/jquery/lib/node-jquery.js:9505:2)
  at Module._compile (module.js:449:26)
  at Object.Module._extensions..js (module.js:467:10)
  at Module.load (module.js:356:32)
  at Function.Module._load (module.js:312:12)
  at Module.require (module.js:362:17)
  at require (module.js:378:17)
  at Object.<anonymous> (/root/dmr-addresses/address/log.js:1:71)

log.js 的第 1 行是:

var $ = require('jquery');

我试过运行npm install jquery,但它并没有解决问题。

【问题讨论】:

  • 这是在 Windows 还是 Linux 上?你有来自 npm install 的日志吗?看起来 XMLHttpRequest 不是窗口的成员。我不确定 jQuery 是否添加了这一点。
  • 我只是问,因为 jQuery 的 npm 安装在 Windows 上存在问题。你确定 window.XMLHttpRequest 是 jQuery 的一部分吗?我不是很精通,但我不记得了。
  • 我不确定,不过升级到最新版本的节点后我开始收到此错误。我也确保尝试了这个问题的答案,但还没有运气..stackoverflow.com/questions/12979531/…
  • @AmolMKulkarni 我认为你是对的,我目前无法解决这个问题,但一旦我能够做到,我会遵循你的建议,谢谢。

标签: node.js express requirejs


【解决方案1】:

实际上在 Node 服务器代码中没有原型对象,它全部存储在更好的 __proto__ 对象中,您应该使用 Object.create/defineProperty

你到底想做什么?使用 Node 运行 ajax 查询?如果是这样,您应该使用Nodes http.request

一个例子可以是:

require('request').post({
    "uri"     : "http://example.com/",
    "headers" : {
        'content-type': 'application/json'
    },
    "body"    : "hello=world"
},
function(e,r,b){
    // e = errors, r = response and b = returned body
    console.log(b,r.statusCode));
});

【讨论】:

    【解决方案2】:

    看起来这是 node-jquery 所依赖的 jsdom 模块的问题。看来这是一个已知问题,并且已修复,但尚未发布到 npm。

    查看:https://github.com/coolaj86/node-jquery/issues/52

    【讨论】:

      【解决方案3】:

      检查一下:

      同样的错误... 我不知道自己在做什么,但我更改了 node-jquery.js 第四至第五行,它开始工作了 :)

      旧:

      if(window == null ) {
          window = require('jsdom').jsdom().createWindow();
      

      新:

      if(!window || !window.document) {
          window = require('jsdom').createWindow();
          window.document = require('jsdom').jsdom();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-11
        • 1970-01-01
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        相关资源
        最近更新 更多