使用couchdb-nano

时间:2018-04-19 09:21:28

标签: node.js typescript couchdb couchdb-nano

由于CouchDB没有任何集合,我向我的实体添加了自定义type属性。现在我想过滤该属性上的所有实体,例如通过{type:'user'}获取所有用户。在couchdb-doc中我发现了一个method called 'find()',它也在纳米类型中实现,但在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" } }在Project Fauxton中运行良好。

1 个答案:

答案 0 :(得分:1)

nano documentation中所述:

  

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

     
      
  1. 错误 - 错误,如果有的话。
  2.   
  3. body - 来自CouchDB的HTTP响应主体,如果没有错误。 JSON解析了主体,非JSON响应的二进制文件。
  4.   
  5. header - 来自CouchDB的HTTP响应头,如果没有错误。
  6.   

因此,在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执行相同操作。