@dotcook/firestore-rest
v1.3.3
Published
Makes firestore requests using the Google REST API to avoid the gRPC cold start issue.
Downloads
18
Maintainers
Readme
Firestore REST
Due to an issue with gRPC, any request that involves Firestore in conjunction with Firebase Functions with take 5-10 seconds to respond after a deploy.
For more information about this particular issue, see this ticket.
As of February 2019, if you want your Firestore requests to respond in less than 5-10 seconds after a deploy, you have to use the REST API provided by googleapis
.
This package wraps the googleapis
class for Firestore in a way that is easier to use.
Hopefully, when this ticket is resolved, this package will no longer be necessary, but according to Google support, this might be a persistent issue until late 2019. Until then, you should be able to use this package without much downside.
https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.documents
Usage
const Firestore = require('firestore-rest')
const db = new Firestore({
projectId: 'my-app-name'
})
module.exports = {
db
}
Then you can use the function the same way you would otherwise, as this package transforms the results to be backwards-compatible. For example:
// get
const getSome = async () => {
try {
const response = await db.collection('users').doc('12312312421321').get()
console.info(response)
} catch (err) {
console.error(err)
}
}
// set
const setSome = async () => {
try {
const response = await db.collection('users').doc('foo').set({ email: '[email protected]' })
console.log(response.writeTime.toDate())
} catch (err) {
console.error(err)
}
}
// where
const setSome = async () => {
try {
const response = await db.collection('users').where('email', '==', '[email protected]').where('name', '>=', 'foo').get()
response.forEach(user => {
console.log(user.data())
})
console.log(response.writeTime.toDate())
} catch (err) {
console.error(err)
}
}