鍍金池/ 問答/數(shù)據(jù)庫(kù)  HTML/ koa2中使用mongodb寫api接口獲取數(shù)據(jù),怎么優(yōu)雅的實(shí)現(xiàn)取到數(shù)據(jù),(我是

koa2中使用mongodb寫api接口獲取數(shù)據(jù),怎么優(yōu)雅的實(shí)現(xiàn)取到數(shù)據(jù),(我是把數(shù)據(jù)添加到新建對(duì)象上,太low了)

const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'youyue';
var obj = {};
module.exports = async(ctx,next)=>{ 

    const num = ctx.query.num,
        page = ctx.query.page,
        sort = ctx.query.sort;

    num = isNaN(num)? 10 : parseFloat(ctx.query.num)
    page = isNaN(page)?0 : parseFloat(ctx.query.page)
    sort = isNaN(sort)?-1 : parseFloat(ctx.query.sort)
       
    console.log(num+"*"+sort+"*"+page);
    MongoClient.connect(url, function (err, client) {
        const db = client.db(dbName);
        const collection = db.collection('site');
        collection.find().sort({ id: sort  }).skip(num*page).limit(num).toArray(function (err, Database){
            console.log(Database);
            //目標(biāo)數(shù)據(jù)
            obj.result = Database;
        });
    });
    await next(); 
    //填充數(shù)據(jù)到頁(yè)面
    ctx.body = obj.result;
}
回答
編輯回答
墨染殤

優(yōu)雅的建議

  1. MongoClient.connectutil.promisify把他改成promiseawait等待鏈接成功。
  2. 持久化數(shù)據(jù)鏈接,不要每次請(qǐng)求鏈接數(shù)據(jù)庫(kù)。
  3. const collection = db.collection('site');寫成類的模式Site.find
  4. 同理把Site.find寫成await。
2017年7月18日 00:53
編輯回答
裸橙

把 query Mongodb 那段寫成一個(gè)function, 這個(gè)function return promise。 然后調(diào)用這個(gè)function 就不low了。

function queryToDB(url){
  return new Promise(function(resolve, reject){
    MongoClient.connect(url, function (err, client) {
    const db = client.db(dbName);
    const collection = db.collection('site');
    collection.find().sort({ id: sort  }).skip(num*page).limit(num).toArray(function (err, Database){
        if(err) reject(err);
        else resolve(Database)
    });
});
    

queryToDB(url).then(function(result){
  if(result && result.length > 0){
    ctx.body = result;
  }
}).catch(function(ex){
   // Todo:
});
2017年12月5日 07:23