我有一个现有的Firebase应用程序(它是为快速原型而构建的,现在它已经变得很大了,我不打算移动,因为现有的依赖关系,也因为易用性和身份验证捆绑在一起),我正在尝试使用FeatherJS构建一个Rest API。
如果您使用的是标准数据库(MongoDB等),那么使用FeathersJS似乎真的很容易。我如何将Firebase与Feathers集成在一起,保持最佳实践(服务架构,AOP)?我可以覆盖羽毛中的服务并将其映射到我的Firebase Rest端点吗?
我在羽毛中创建了一个自定义服务,并尝试这样做:
get(id, params) {
return Promise.resolve(FirebaseRef.child(id).once('value'));
}
我得到的是:
Converting circular structure to JSON error
我做的是正确的吗?
发布于 2016-09-06 13:12:56
这是可行的:
return Promise.resolve(FirebaseRef.child('userId1').once('value').then(function (snap) {
return snap.val();
}));
我仍然不确定这是否是将Firebase与FeathersJs集成的最佳方式
发布于 2018-10-28 00:25:09
实时Firebase和whereas之间的主要架构差异在于,Firebase使用键值观察,而Feathers使用在遵循REST architecture时自动获得的real-time events。第一步是将通用的Firebase操作封装在它自己的custom service中,它可能看起来像这样(未经过测试):
class FirebaseService {
constructor(name) {
this.name = name;
}
ref(id) {
return firebase.database().ref(`${this.name}/${id}`);
}
async get(id) {
const ref = await this.ref(id).once('value');
return ref.value;
}
async create(data) {
const id = firebase.database().ref().child(`/${this.name}`).push().key;
return this.update(id, data);
}
async update(id, data) {
this.ref(id).set(data);
return this.get(id);
}
async remove(id) {
const deletedEntry = await this.get(id);
this.ref(id).remove();
return deletedEntry;
}
}
这已经让你得到了一个羽毛Firebase集成,只要你通过羽毛应用程序接口使用它,它就会自动发送real-time events。如果Firebase在服务外部得到更新,并且您希望通知客户端,则可以使用值侦听器,并在服务器上的服务上调用update
和/或patch
:
const id = <some user id>;
firebase.database().ref(`/users/${id}`).on('value', snapshot => {
app.service('users').update(id, snapshot.value);
});
https://stackoverflow.com/questions/39339170
复制相似问题