【问题标题】:NodeJS - Google API Module - [TypeError: Cannot read property 'prototype' of undefined]NodeJS - Google API 模块 - [TypeError:无法读取未定义的属性“原型”]
【发布时间】:2014-08-30 06:38:26
【问题描述】:

我将 nodejs 模块“googleapis”(npm install googleapis) 安装到 Azure 移动服务实例,我想用我在此处找到的一些示例代码进行快速测试 https://www.npmjs.org/package/googleapis。在尝试了在谷歌驱动器中创建文本文件的代码示例后,我在控制台中收到以下错误消息:

[TypeError: Cannot read property 'prototype' of undefined]

当前版本的google-api-nodejs-client / apis / index.js (https://github.com/google/google-api-nodejs-client/blob/master/apis/index.js)的第40行出现错误:

var Endpoint = require(__dirname + '/' + filename + '/' + path.basename(version));

在调试的时候,我可以看到上述方法中使用的路径如下:

D:\home\site\wwwroot\App_Data\config\scripts\node_modules\googleapis\apis\drive\v2

我已经验证路径是正确的。

这是我尝试运行的代码:

var google = require('googleapis');

var OAuth2Client = google.auth.OAuth2;
var CLIENT_ID = 'xxxx';
var CLIENT_SECRET = 'xxxxxx';
var REDIRECT_URL = 'xxxxx';
var oauth2Client = new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);
oauth2Client.setCredentials({
access_token: identities.google.accessToken
});

var drive = google.drive({ version: 'v2', auth: oauth2Client });

drive.files.insert({
  resource: {
    title: 'Test',
    mimeType: 'text/plain'
  },
  media: {
    mimeType: 'text/plain',
    body: 'Hello World'
  }
}, function(err, response) {
console.log('error:', err, 'inserted:', response.id);
});

问题的根源是什么?

这是错误堆栈跟踪:

TypeError: Cannot read property 'prototype' of undefined at Object.<anonymous> 
(D:\home\site\wwwroot\App_Data\config\scripts\node_modules\googleapis\node_modules\multipart-stream\node_modules\sandwich-stream\lib\sandwich-stream.js:24:50) 
    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> (D:\home\site\wwwroot\App_Data\config\scripts\node_modules\googleapis\node_modules\multipart-stream\index.js:1:78) 
    at Module._compile (module.js:449:26) 
    at Object.Module._extensions..js (module.js:467:10)

这里是 Sandwich-stream.js 的第 24 行:

SandwichStream.prototype = Object.create(Readable.prototype, {
  constructor: SandwichStream
});

nodejs版本为:

Node version: v0.8.28

【问题讨论】:

    标签: node.js azure-mobile-services google-api-nodejs-client


    【解决方案1】:

    我的猜测是 Azure 移动服务正在使用 __dirname 做一些时髦的事情,导致文件路径无法正确解析。你能检查你运行它的日志吗?实际错误应该是 console.log'd 从这一行:https://github.com/google/google-api-nodejs-client/blob/master/apis/index.js#L45

    【讨论】:

    • 路径如下:D:\home\site\wwwroot\App_Data\config\scripts\node_modules\googleapis\apis/drive/v2,index.js第45行返回的错误是[TypeError:无法读取未定义的属性“原型”]
    • 我确认路径正确。 D:\home\site\wwwroot\App_Data\config\scripts\node_modules\googleapis\apis/drive/‌​v2.js 是文件在服务器上的位置。
    • 我认为这个问题是由 Win32 系统上的混合路径分隔符引起的。我刚刚提交了pull request,希望能解决这个问题。如果可以,请尝试修改项目中的 apis/index.js,使其包含 PR 中引入的更改,并让我们知道这是否适合您。
    • @RobertRossmann 不幸的是,我昨天试过了,但它并没有解决我的问题。引发错误的行是var Endpoint = require('D:\home\site\wwwroot\App_Data\config\scripts\node_modules\googleapis\apis\drive\v2')。 [TypeError:无法读取未定义的属性“原型”]。我还尝试将 .js 扩展名添加到路径中,并使用 fs.existsSync() 方法验证了路径是否正确。
    • 抱歉,google-api-nodejs-client 1.x 版仅支持 Node 0.10.x。您可以在此处的 .travis.yml 文件中看到这一点:github.com/google/google-api-nodejs-client/blob/master/…
    猜你喜欢
    • 2019-05-05
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2020-05-11
    • 2022-09-23
    相关资源
    最近更新 更多