#typescript #firebase #google-cloud-firestore #google-cloud-functions
#typescript #firebase #google-cloud-firestore #google-cloud-функции
Вопрос:
Когда создается новый пользователь, я хочу, чтобы облачная функция вставляла новую запись в мою users
коллекцию. Я попытался сделать это с помощью приведенного ниже кода, но когда я проверил свои журналы, он выдал эту ошибку:
Ошибка типа: не удается прочитать свойство ‘resourcePath’ из undefined в doc (/workspace/node_modules …)
Причина, по которой я хочу сделать это таким образом, заключается в том, что я хочу иметь возможность сохранять идентификатор документа внутри самого документа. Это будет служить «указателем строки», как в SQL — уникальный способ идентификации строки в коллекции.
Код:
exports.newUserSignup = functions.auth.user().onCreate(user => {
console.log('user created', user.email, user.uid);
const doc = admin.firestore().collection('users').doc
return doc(user.uid).set({
createDate: admin.database.ServerValue.TIMESTAMP,
modifiedDate: admin.database.ServerValue.TIMESTAMP,
username: 'blah',
email: user.email,
stat: 1,
uid: user.uid,
rowpointer: doc().id,
});
});
Ответ №1:
Вы почти на месте, но в вашем коде есть несколько синтаксических ошибок. Это должно быть ближе:
exports.newUserSignup = functions.auth.user().onCreate(user => {
console.log('user created', user.email, user.uid);
const doc = admin.firestore().collection('users').doc();
return doc.set({
createDate: admin.database.ServerValue.TIMESTAMP,
modifiedDate: admin.database.ServerValue.TIMESTAMP,
username: 'blah',
email: user.email,
stat: 1,
uid: user.uid,
rowpointer: doc.id,
});
});
Я настоятельно рекомендую держать справочные документы под рукой, когда у вас возникают проблемы с этим типом упражнений, поскольку я довольно быстро обнаружил проблему, просмотрев CollectionReference.doc()
и DocumentReference
Комментарии:
1. Отличный совет, я действительно забыл открыть их сегодня. Похоже, что это сработало, но для 2 полей даты он написал .sv: «временная метка» вместо фактической временной метки: imgur.com/xaNx7rq Знаете ли вы, почему он мог это сделать?
2. Не сразу, но это тоже кажется отдельной проблемой. Я рекомендую открыть новый вопрос для этой проблемы, а также показать, как вы
admin
туда импортируете.3. Ах, я только что заметил это: вы используете
admin.database.ServerValue.TIMESTAMP
, и так и должно бытьadmin.firestore.FieldValue.serverTimestamp()
.