为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英4014372 2019-03-12 17:19:43
const MongoClient = require('mongodb').MongoClient;const url = 'mongodb://localhost:27017';// Database Nameconst 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;}
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超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:

});


查看完整回答
反对 回复 2019-03-27
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

优雅的建议

  1. MongoClient.connectutil.promisify把他改成promiseawait等待链接成功。

  2. 持久化数据链接,不要每次请求链接数据库。

  3. const collection = db.collection('site');写成类的模式Site.find

  4. 同理把Site.find写成await


查看完整回答
反对 回复 2019-03-27
  • 2 回答
  • 0 关注
  • 1602 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信