1

由于 CouchDB 没有任何集合,我type向我的实体添加了一个自定义属性。现在我想过滤该属性上的所有实体,例如通过 . 获取所有用户{type:'user'}。在 couchdb-doc 中,我发现了一个名为 'find()' 的方法,它也在 nano 类型中实现,但在couchdb-nano中缺少文档。根据定义,我写了如下代码:

class UserModel {
    type: string = 'User';
    name: string = '';
    mail: string = '';
}
let db = <nano.DocumentScope<UserModel>>nano("http://localhost:5984/testdb");
let query: nano.MangoQuery = { selector: { type: "User" } };
db.find(query, (cb:nano.Callback<nano.MangoResponse<UserModel>>) => {
    // How to get the results here? cb is a callback, but this doesn't make sense
});

我收到回调对我来说没有意义。我怎样才能得到结果?

尝试使用某种回调:

db.find(query, (users: nano.MangoResponse<UserModel>) => {
    console.log(users);
});

但是users未定义,尽管过滤器{ selector: { type: "User" } }在 Fauxton 项目中运行良好。

4

1 回答 1

4

纳米文档中所述:

在 nano 中,回调函数总是接收三个参数:

  1. err - 错误(如果有)。
  2. body - 来自 CouchDB 的 HTTP 响应正文,如果没有错误。JSON 解析的正文,非 JSON 响应的二进制文件。
  3. header - 来自 CouchDB 的 HTTP 响应标头,如果没有错误。

因此,在您的情况下,db.find您将拥有:

db.find(query, (err, body, header) => {
    if (err) {
        console.log('Error thrown: ', err.message);
        return;
    }
    console.log('HTTP header received: ', header)
    console.log('HTTP body received: ', body)
});

没有使用typescript,但是我认为您可以使用typescript.

于 2018-04-19T10:57:23.130 回答