2017-10-13 31 views
1

我仍在学习js,但我试图在nodejs中编写一个基本的服务器。 服务器应该接受查询,然后从数据库返回JSON。使用数据库和服务器的承诺

我试图使用承诺,但可以得到我的头。 我的服务器返回一个空的答复。 那么我做错了什么?

我的服务器上的文件至今(简体):

http.createServer(function (request, response) { 
    if (request.method === "GET") { 
    ... 
    var dbRes = dbFunc.getFromDB(query); 
    response.statusCode = 200; 
    response.setHeader('Content-Type', 'application/json'); 
    response.end(JSON.stringify(dbRes)); 
    } 
}).listen(port); 

我的数据库文件至今(简体):

exports.readHandeler = function (query) { 

    var promise = new Promise(function(resolve, reject) { 
    db.collection('data').find(query).toArray(function(err, res) { 
     if (err) { 
     throw err; 
     reject(-1); 
     } 
     resolve(res);  
    }  
    }); 

    promise.then(function(result) { 
    return result; 
    }, function(err) { 
    return -1; 
    }); 
} 

回答

0

我的服务器返回一个空应答。那么我做错了什么?

您的dbRes将会是undefined,因为您期待异步承诺执行的响应。只有在承诺解决后您才需要发送回复。

使这改变了代码

http.createServer(function (request, response) { 
    if (request.method === "GET") { 
    ... 
    dbFunc.getFromDB(query).then((dbRes) => { 
     response.statusCode = 200; 
     response.setHeader('Content-Type', 'application/json'); 
     response.end(JSON.stringify(dbRes)); 
    }).catch((err) => { 
     console.log('err', err.stack); 
    }); 

    } 
}).listen(port); 

此外,您还需要在数据库执行部分返回承诺。

exports.readHandeler = function (query) { 
    return new Promise(function (resolve, reject) { 
    db.collection('data').find(query).toArray(function (err, result) { 
     if (err) { 
     return reject(err); // or -1 based on your need 
     } 
     return resolve(result); 
    }); 
    }); 
}; 
+0

Thx ill试试看,=>符号是什么意思? – ortusolis

+0

这是一个较短的函数,不绑定'this'。例如,你可以检查[mdn](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) – Sridhar

+0

好吧,我明白,ty – ortusolis