NodeJS - Модуль Google API - [TypeError: невозможно прочитать свойство 'prototype' из неопределенного]

Я установил модуль nodejs "googleapis" (npm install googleapis) в экземпляр мобильных служб Azure и хотел провести быстрый тест с помощью примера кода, который я нашел здесь https://www.npmjs.org/package/googleapis. Попробовав образец кода, который создает текстовый файл на диске Google, я получаю следующее сообщение об ошибке в консоли:

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

Ошибка возникает в строке 40 текущей версии google-api-nodejs-client / apis / index.js (https://github.com/google/google-api-nodejs-client/blob/master/apis/index.js):

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)

Вот строка 24 файла sandwich-stream.js:

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

Версия nodejs:

Node version: v0.8.28

person DDA    schedule 30.08.2014    source источник


Ответы (1)


Я предполагаю, что мобильные службы Azure делают что-то странное с __dirname, из-за чего путь к файлу не разрешается правильно. Можете ли вы проверить журналы, в которых вы это запускаете? Фактическая ошибка должна быть записана в console.log из этой строки: https://github.com/google/google-api-nodejs-client/blob/master/apis/index.js#L45

person Ryan Seys    schedule 30.08.2014
comment
Путь следующий: D: \ home \ site \ wwwroot \ App_Data \ config \ scripts \ node_modules \ googleapis \ apis / drive / v2, а в строке 45 index.js возвращается ошибка [TypeError: невозможно прочитать прототип свойства 'of undefined] - person DDA; 31.08.2014
comment
Подтверждаю, что путь правильный. D: \ home \ site \ wwwroot \ App_Data \ config \ scripts \ node_modules \ googleapis \ apis / drive / ‌ v2.js - расположение файла на сервере. - person DDA; 31.08.2014
comment
Я считаю, что проблема вызвана смешанными разделителями путей в системах Win32. Я только что отправил запрос на перенос, который, надеюсь, исправит это. Если можете, попробуйте изменить apis / index.js в своем проекте так, чтобы он содержал изменения, внесенные в PR, и сообщите нам, работает ли это для вас. - person Robert Rossmann; 31.08.2014
comment
@RobertRossmann К сожалению, я попробовал это вчера, и это не решило мою проблему. Строка, вызывающая ошибку, - var Endpoint = require('D:\home\site\wwwroot\App_Data\config\scripts\node_modules\googleapis\apis\drive\v2'). [TypeError: Невозможно прочитать прототип свойства undefined]. Я также попытался добавить расширение .js к пути и убедился, что путь правильный, используя метод fs.existsSync (). - person DDA; 31.08.2014
comment
Интересный. Не могли бы вы обновить вопрос, указав полную трассировку стека ошибки? - person Robert Rossmann; 31.08.2014
comment
@RobertRossmann Я добавил к своему вопросу трассировку стека ошибки. Спасибо! - person DDA; 01.09.2014
comment
Извините, но версия 1.x google-api-nodejs-client поддерживает только Node 0.10.x. Вы можете увидеть это в файле .travis.yml здесь: github.com/google/google-api-nodejs-client/blob/master/ - person Ryan Seys; 01.09.2014
comment
Спасибо, Райан! Это имеет смысл. Я посмотрю, смогу ли я перейти на 0.10.x - person DDA; 01.09.2014
comment
Большое спасибо за сообщение о ваших проблемах. Это указывает на несколько ошибок в нашем коде, которые мы собираемся исправить (github.com/google/google-api-nodejs-client/pull/271 и github.com/google/google-api-nodejs-client/pull/269). Надеюсь, обновление до 0.10.x решит ваши проблемы. :) - person Ryan Seys; 01.09.2014