koa2中使用mongodb写api接口获取数据,怎么优雅的实现取到数据,(我是把数据添加到新建对象上,太low了)

发布于 2022-09-06 23:25:36 字数 936 浏览 12 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱本泡沫多脆弱 2022-09-13 23:25:36

把 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:
});
家住魔仙堡 2022-09-13 23:25:36

优雅的建议

  1. MongoClient.connectutil.promisify把他改成promiseawait等待链接成功。
  2. 持久化数据链接,不要每次请求链接数据库。
  3. const collection = db.collection('site');写成类的模式Site.find
  4. 同理把Site.find写成await
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文