我有一个看似奇怪的情况。我刚刚开始尝试使用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
});
答案 0 :(得分:0)
在您的Mongo课程中,如果通话成功,您将使用callback(docs);
拨打回叫。但第一个参数是错误,而不是结果!你想要的是callback(null, docs);
。
Typescript会为您捕获此错误。即
// before
function(err, docs)
// after
function(err: Error, docs: Doc[])