Angular 服务中不提供关系 pouch 方法
Relational pouch methods aren't available in Angular Service
我正在尝试让 relational-pouch 正常工作,我能够设置模式,但是当我调用保存函数时我收到错误 TypeError: this.rel.save is not a function
这是设置:
import PouchDB from 'pouchdb-browser'
import find from 'pouchdb-find'
import rel from 'relational-pouch'
@Injectable({
providedIn: 'root'
})
export class PouchDBService {
public base_db: PouchDB.Database
public rel
constructor() {
PouchDB.plugin(find)
PouchDB.plugin(rel)
this.base_db = new PouchDB('Eeeek')
this.rel = this.base_db.setSchema(schema)
this.rel.save('project', {
name: 'George R. R. Martin', id: 1, books: [6, 7]
})
}
}
当我尝试调用 this.rel.find(id)
时,它似乎忽略了 relational-pouch 定义并使用了 pouch-find 定义。所以 this.rel.find(id)
结果是 Error: you must provide search parameters to find()
但是
this.db.rel.find({
selector: {
type: this.type
}
})
有效。
依赖项似乎很好,我很困惑,非常感谢任何帮助。
谢谢。
ps。使用 angular 12.
您没有像宣传的那样使用 rel
字段。从类型声明 rel
定义为
interface RelDatabase<Content extends {} = {}> extends Database<Content> {
rel: RelDB;
}
所以我不明白这段代码是如何编译的
它正在编译,因为 rel
隐含为 any
public base_db: PouchDB.Database
public rel
. . .
this.rel = this.base_db.setSchema(schema)
this.rel.save('project', {
name: 'George R. R. Martin', id: 1, books: [6, 7]
})
这是 Typescript 的一个好处,可以让您省去很多疑惑:
public rel: PouchDB.RelDatabase;
这就是您要找的(有点)
this.rel = this.base_db.setSchema(schema)
this.rel.rel.save('project', {
name: 'George R. R. Martin', id: 1, books: [6, 7]
})
但这读起来很糟糕 - 我推荐
export class PouchDBService {
// why have a service if these are public...
private db: PouchDB.Database;
private rdb: PouchDB.RelDatabase;
无论如何,这里的主要内容是使用显式类型。这显然是正确的:
db: PouchDB.Database;
rdb: PouchDB.RelDatabase;
async demoRelDb(dbName: string): Promise<any> {
PouchDB.plugin(find).plugin(rel);
this.db = new PouchDB(dbName);
this.rdb = this.db.setSchema([
{ singular: "author", plural: "authors", relations: { books: { hasMany: "book" } } },
{ singular: "book", plural: "books", relations: { author: { belongsTo: "author" } } },
]);
await this.rdb.rel.save("author", {
name: "George R. R. Martin",
id: 1,
books: [6, 7],
});
let result await this.rdb.rel.find("author", 1);
console.log(JSON.stringify(doc, undefined, 3));
}
好的,现在你应该上路了。但是我警告人们不要使用这个插件,因为它看起来实际上已经被废弃了,问题 #125 是一个阻碍。
直到进行一些维护 - 有 16 个 pull requests 跨越 2 年 - 我不会使用它。如果有的话,寻找一个可行的叉子。
我正在尝试让 relational-pouch 正常工作,我能够设置模式,但是当我调用保存函数时我收到错误 TypeError: this.rel.save is not a function
这是设置:
import PouchDB from 'pouchdb-browser'
import find from 'pouchdb-find'
import rel from 'relational-pouch'
@Injectable({
providedIn: 'root'
})
export class PouchDBService {
public base_db: PouchDB.Database
public rel
constructor() {
PouchDB.plugin(find)
PouchDB.plugin(rel)
this.base_db = new PouchDB('Eeeek')
this.rel = this.base_db.setSchema(schema)
this.rel.save('project', {
name: 'George R. R. Martin', id: 1, books: [6, 7]
})
}
}
当我尝试调用 this.rel.find(id)
时,它似乎忽略了 relational-pouch 定义并使用了 pouch-find 定义。所以 this.rel.find(id)
结果是 Error: you must provide search parameters to find()
但是
this.db.rel.find({
selector: {
type: this.type
}
})
有效。
依赖项似乎很好,我很困惑,非常感谢任何帮助。
谢谢。
ps。使用 angular 12.
您没有像宣传的那样使用 rel
字段。从类型声明 rel
定义为
interface RelDatabase<Content extends {} = {}> extends Database<Content> {
rel: RelDB;
}
所以我不明白这段代码是如何编译的
它正在编译,因为 rel
隐含为 any
public base_db: PouchDB.Database
public rel
. . .
this.rel = this.base_db.setSchema(schema)
this.rel.save('project', {
name: 'George R. R. Martin', id: 1, books: [6, 7]
})
这是 Typescript 的一个好处,可以让您省去很多疑惑:
public rel: PouchDB.RelDatabase;
这就是您要找的(有点)
this.rel = this.base_db.setSchema(schema)
this.rel.rel.save('project', {
name: 'George R. R. Martin', id: 1, books: [6, 7]
})
但这读起来很糟糕 - 我推荐
export class PouchDBService {
// why have a service if these are public...
private db: PouchDB.Database;
private rdb: PouchDB.RelDatabase;
无论如何,这里的主要内容是使用显式类型。这显然是正确的:
db: PouchDB.Database;
rdb: PouchDB.RelDatabase;
async demoRelDb(dbName: string): Promise<any> {
PouchDB.plugin(find).plugin(rel);
this.db = new PouchDB(dbName);
this.rdb = this.db.setSchema([
{ singular: "author", plural: "authors", relations: { books: { hasMany: "book" } } },
{ singular: "book", plural: "books", relations: { author: { belongsTo: "author" } } },
]);
await this.rdb.rel.save("author", {
name: "George R. R. Martin",
id: 1,
books: [6, 7],
});
let result await this.rdb.rel.find("author", 1);
console.log(JSON.stringify(doc, undefined, 3));
}
好的,现在你应该上路了。但是我警告人们不要使用这个插件,因为它看起来实际上已经被废弃了,问题 #125 是一个阻碍。
直到进行一些维护 - 有 16 个 pull requests 跨越 2 年 - 我不会使用它。如果有的话,寻找一个可行的叉子。