koa2中使用mongodb写api接口获取数据,怎么优雅的实现取到数据

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);

            //目标数据

            obj.result = Database;

        });

    });

    await next(); 

    //填充数据到页面

    ctx.body = obj.result;

}


慕桂英4014372
浏览 1604回答 2
2回答

慕斯王

把 query Mongodb 那段写成一个function, 这个function return promise。 然后调用这个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:});

慕姐8265434

优雅的建议把MongoClient.connect用util.promisify把他改成promise用await等待链接成功。持久化数据链接,不要每次请求链接数据库。把const collection = db.collection('site');写成类的模式Site.find。同理把Site.find写成await。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript