1

Я установил модуль nodejs «googleapis» (npm install googleapis) в экземпляр Azure Mobile Services, и я хотел выполнить быстрый тест с некоторым примером кода Я нашел здесь https://www.npmjs.org/package/googleapis. После попытки пример кода, который создает текстовый файл в Google диске я получаю следующее сообщение об ошибке в консоли:NodeJS - модуль API Google - [TypeError: невозможно прочитать прототип свойства 'undefined]

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

ошибка происходит в строке 40 текущей версии Google-API-nodejs-клиент/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 сендвич-stream.js:

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

nodejs версия:

Node version: v0.8.28 

ответ

2

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

+0

Путь следующий: D: \ home \ site \ wwwroot \ App_Data \ config \ scripts \ node_modules \ googleapis \ apis/drive/v2 и ошибка, возвращаемая в строке 45 индекса.js [TypeError: Can not read property «prototype» undefined] – DDA

+0

Я подтверждаю, что путь правильный. D: \ home \ site \ wwwroot \ App_Data \ config \ scripts \ node_modules \ googleapis \ apis/drive/v2.js - это местоположение файла на сервере. – DDA

+0

Я считаю, что проблема вызвана смешанными разделителями путей в системах Win32. Я отправил запрос [pull request] (https://github.com/google/google-api-nodejs-client/pull/271), который, как мы надеемся, исправит это. Если можно, попробуйте изменить * apis/index.js * в своем проекте, чтобы он содержал изменения, внесенные в PR, и сообщите нам, если это сработает для вас. –