不被抛出的错误

时间:2016-04-20 18:21:24

标签: javascript node.js mongodb oop typescript

我有一个看似奇怪的情况。我刚刚开始尝试使用Typescript,我正在尝试实现一个与NodeJS一起使用的接口。我创建了一个"发现" function,返回MongoDB集合中的所有结果。但是,结果不会以我期望的方式返回。例如,下面的代码工作的唯一方法是,如果我执行" res.send(错误)",因为该变量包含查询的结果。 "结果"变量返回未定义。

我想知道的是两个方面:

1)我做错了什么? 2)如何获得回调以正确显示错误和结果?

接口:

interface ICallback{
    (error: string, results: string): void;
}

export interface IDatabase{
    find(db: string, callback : ICallback) : void;
}

Mongo Class

export class MongoDB extends Database implements IDatabase{
    //...
    find(collection, callback){
        db.find().toArray(function(err, docs){
            if(err){
                callback(err);
            }
           callback(docs);
       });
   };
}

节点控制器

exports.findAll = function(req, res) {

    //... instantiate new db, connect, get the collection, assign to
   // thisColl variable

    dbInstance.find(thisColl, function(err, results){
        if(err){
           return err; //contains the actual results
        };
        res.send(results); //comes back undefined
    });

1 个答案:

答案 0 :(得分:0)

在您的Mongo课程中,如果通话成功,您将使用callback(docs);拨打回叫。但第一个参数是错误,而不是结果!你想要的是callback(null, docs);

如果您在查询回调中添加了打字输入,那么

Typescript会为您捕获此错误。即

// before
function(err, docs)

// after
function(err: Error, docs: Doc[])