2017-10-04 17 views
5

我正嘗試使用NodeJS v8.6.0在Firestore上創建一個帶有引用的文檔。像這樣在Firestore(NodeJS)上的文檔中設置DocumentReference

const admin = require('firebase-admin') 
admin.initializeApp({ credential: MY_CREDENTIAL, databaseURL: MY_DB_URL }) 
const db = admin.firestore() 

const ref = db.doc('foo/someDoc') 
db.doc('bar/targetDoc').set({ link: ref }) 

雖然refDocumentReference,它導致

Error: Argument "data" is not a valid Document. Input object is deeper than 20 levels or contains a cycle.

反正有做它的NodeJS(管理)SDK?


另外,在該代碼中使用的包是

"firebase-admin": "^5.4.1" 

console.log(ref) 

輸出

DocumentReference { 
    _firestore: 
    Firestore { 
    makeAuthenticatedRequest: 
     { [Function: makeAuthenticatedRequest] 
     getCredentials: [Function: bound getCredentials], 
     authClient: [Object] }, 
    authClient: 
     Auth { 
     authClientPromise: null, 
     authClient: null, 
     config: [Object], 
     environment: {} }, 
    baseUrl: undefined, 
    getCredentials: [Function: bound getCredentials], 
    globalInterceptors: [], 
    interceptors: [], 
    packageJson: 
     { name: '@google-cloud/firestore', 
     version: '0.8.1', 
     author: 'Google Inc.', 
     description: 'Firestore Client Library for Node.js', 
     contributors: [Array], 
     main: './src/index.js', 
     files: [Array], 
     repository: 'googleapis/nodejs-firestore', 
     keywords: [Array], 
     dependencies: [Object], 
     devDependencies: [Object], 
     scripts: [Object], 
     license: 'Apache-2.0', 
     engines: [Object], 
     types: './types/firestore.d.ts' }, 
    projectId: 'MY_PROJECT', 
    projectIdRequired: true, 
    Promise: [Function: Promise], 
    grpcMetadata: Metadata { _internal_repr: [Object] }, 
    maxRetries: undefined, 
    userAgent: 'gcloud-node-firestore/0.8.1', 
    activeServiceMap_: Map {}, 
    protos: {}, 
    _preferTransactions: false, 
    _lastSuccessfulRequest: null, 
    api: { Firestore: [Object] }, 
    _referencePath: 
     ResourcePath { 
     segments: [], 
     _formattedName: undefined, 
     _projectId: 'dewpod-dev', 
     _databaseId: '(default)' }, 
    app: 
     FirebaseApp { 
     firebaseInternals_: [Object], 
     services_: [Object], 
     isDeleted_: false, 
     name_: '[DEFAULT]', 
     options_: [Object], 
     database: [Function: bound ], 
     auth: [Function: bound ], 
     messaging: [Function: bound ], 
     storage: [Function: bound ], 
     firestore: [Function: bound ], 
     INTERNAL: [Object] }, 
    INTERNAL: FirestoreInternals {} }, 
    _referencePath: 
    ResourcePath { 
    segments: [ 'orgs', 'fooOrg' ], 
    _formattedName: undefined, 
    _projectId: 'dewpod-dev', 
    _databaseId: '(default)' } } 

和完整的錯誤消息是

/SOME_PATH/node_modules/@google-cloud/firestore/src/validate.js:86 
     throw new Error(message); 
     ^

Error: Argument "data" is not a valid Document. Input object is deeper than 20 levels or contains a cycle. 
    at Object.exports.(anonymous function) [as isDocument] (/SOME_PATH/node_modules/@google-cloud/firestore/src/validate.js:86:15) 
    at WriteBatch.set (/SOME_PATH/node_modules/@google-cloud/firestore/src/write-batch.js:251:14) 
    at DocumentReference.set (/SOME_PATH/node_modules/@google-cloud/firestore/src/reference.js:416:8) 
    at Object.<anonymous> (/SOME_PATH/fstest.js:17:20) 
    at Module._compile (module.js:624:30) 
    at Object.Module._extensions..js (module.js:635:10) 
    at Module.load (module.js:545:32) 
    at tryModuleLoad (module.js:508:12) 
    at Function.Module._load (module.js:500:3) 
    at Function.Module.runMain (module.js:665:10) 
+0

@NovoLucas似乎該示例不保存任何引用。你能指出它在哪裏嗎? –

+0

這應該起作用,所以這可能是一個依賴性問題,使得'DocumentReference'在'set'中檢查instanceof失敗。 你如何導入Firestore?你確定你只輸入一次嗎? 你可以'console.log(ref);' 另外,你正在使用哪個版本的節點? –

+0

@GilGilbert編輯了這篇文章。請檢查。而且,是的,我可以用NodeJS v8.6.0以最少的代碼重現它。 「需要('firebase-admin')」一次,「admin.initializeApp」一次。 –

回答

6

這是admin SDK和Firestore常規節點SDK之間的交互中的一個錯誤。

更新至@ google-cloud/firestore 0.8.2應該可以解決此問題。

您可以用npm update更新您的項目以獲得此更改。