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 })
雖然ref
是DocumentReference
,它導致
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)
@NovoLucas似乎該示例不保存任何引用。你能指出它在哪裏嗎? –
這應該起作用,所以這可能是一個依賴性問題,使得'DocumentReference'在'set'中檢查instanceof失敗。 你如何導入Firestore?你確定你只輸入一次嗎? 你可以'console.log(ref);' 另外,你正在使用哪個版本的節點? –
@GilGilbert編輯了這篇文章。請檢查。而且,是的,我可以用NodeJS v8.6.0以最少的代碼重現它。 「需要('firebase-admin')」一次,「admin.initializeApp」一次。 –