如何使用pouchdb持久保存和检索打字稿对象?

时间:2019-01-28 22:31:48

标签: typescript vue.js pouchdb

我一般对打字稿和Webdev都是陌生的,并且希望在打字稿项目中使用pouchdb来保存对象。我在寻找正确的方法时遇到了麻烦,而且文档非常稀缺。

我有一个Typescript对象,这些对象是从Document基类派生的,该基类具有必需的_id和_rev字段。我在正确的轨道上吗?远程关闭?

这是我尝试创建一个文档基类的尝试,该基类闻起来应该放在PouchDB数据库中-

[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)

显然,我可以将其插入数据库中

import PouchDB from 'pouchdb';

// Base class for all objects which are persisted in database
export class Document {

    readonly type: string;
    readonly _id: string;
    private _rev?: string; //set by database when document is inserted

    constructor(type: string, id_suffix?: string) {
        this.type = type;
        let unique_id: string = uuid();

        if (id_suffix === undefined) {
            this._id = '${type}_${unique_id}'
        }
        else {
            this._id = '${type}_${id_suffix}_${unique_id}'
        }
    }
}

有人可以帮我找回我的东西吗?

2 个答案:

答案 0 :(得分:0)

这似乎起作用...

import PouchDB from 'pouchdb';

// Base class for all objects which are persisted in database
export class Document {

    readonly type: string;
    readonly _id: string;
    private _rev?: string; //set by database when document is inserted

    constructor(type: string, id_suffix?: string) {
        this.type = type;
        let unique_id: string = uuid();

        if (id_suffix === undefined) {
            this._id = '${type}_${unique_id}'
        }
        else {
            this._id = '${type}_${id_suffix}_${unique_id}'
        }
    }
}

db.put(t);

let output = db.get<Document>(t._id).then(function (doc){
    let x: Document = doc;
    return x;
})

答案 1 :(得分:0)

对于记录,当您从普通对象(Pouchdb存储JSON对象)转换返回值(例如as Document)时,您丢失了原型。因此,您必须从头开始重建实例。

例如:

let output = db.get<Document>(t._id).then(function (doc){
    return new Document(
        doc.type,
        doc. id_suffix
    );
})

或者按照建议的here,使用Object.assign(尚未通过这种方式进行测试)。