美文网首页微信小程序微信小程序开发工具
云开发小程序构建实例——SCI期刊影响因子查询

云开发小程序构建实例——SCI期刊影响因子查询

作者: 克里克的钟 | 来源:发表于2019-03-06 15:47 被阅读21次

去年做了一个查询类的小程序,使用的是本地数据集,后期经过爬虫获取了一部分内容的更新,全部导入到本地数据集的时候,超过了微信小程序代码最大限制(2M)。作为生物医学专业的科研狗,对于程序的学习远远不够,倒腾了一下wafer2,没搞定,于是放弃。几个月后无意发现了腾讯云开发平台,无需搭建服务器,即可使用云端能力。于是重新钻研,终于完成了我的第一个云开发小程序。

主界面是这个样子的,结构简单,功能单一。。。

image

下面主要介绍一下云开发的部分:

1. 实现搜索功能的代码

//获得输入信息
  JournalNameInput: function (e) {
    console.log(e);
    this.setData({
      journal_name: e.detail.value
    })
    this.auto()
  },

  //自动运行匹配本地期刊信息数据
  auto: function () {
    let inputSd = this.data.journal_name //目前输入框内的信息
    let sd = inputSd.toLowerCase(); //转换为小写
    let num = sd.length
    const journalList = this.data.journalList;
    let finalJournalList = []
    if (num >= 4) {
      let temp = journalList.filter(
        item => {
          let text1 = item.journal.slice(0, num)
          let text = text1.toLowerCase()
          return (text && text == sd)
        }
      )
      if (temp[0]) {
        temp.map(
          item => {
            let testObj = {};
            testObj.journal = item.journal
            testObj.factor = item.factor
            finalJournalList.push(testObj)
          }
        )
        this.setData({
          completeList: finalJournalList,
        })
      } else {
        return
      }
    }
  },

这样,输入的期刊名称会返回到journal_name中,然后自动调用auto函数,得到匹配的列表completeList。

2. 在渲染层中的列表渲染

<ul wx:for="{{completeList}}" wx:key="index" class="ul">
  <li bindtap="bindJournal" data-journal="{{item.journal}}" data-factor="{{item.factor}}" class="li">{{item.journal}} :  {{item.factor}}
  </li>
</ul>

object对象无法直接输出结果,起初不明白,也倒腾了好一会,后来才找到这样的解决的方法。
以上代码借鉴 微信小程序 实现城市名称拼音搜索框

3.云开发的实现

云开发平台包括有数据库、云函数、存储和基本的统计分析等功能,不需要太多的配置,就可以使用。开通云开发后初始默认可拥有最多两个环境。在实际开发中,官方建议每一个正式环境都搭配一个测试环境。
本小程序用到的仅仅是数据库部分,可以先了解关于数据库读取的介绍。配置的部分按照官方的教程即可。
假设有一个环境名为 test,用做测试环境,那么可以如下获取测试环境数据库:

const db = wx.cloud.database({
    env: 'test' //实际上是test的**环境id**,而不是名字
  })

然后是数据的查找:

db.collection('sci').where({
    journal:journal
  }).get().then(res => {
    this.setData({  
      queryResult: res.data,
    })
    console.log('[数据库] [查询记录] 成功: ', res)
  })

queryResult获得的也是一个对象(object)数据,通过上面介绍的方式展现出结果。

关于数据的录入

可以使用json或者csv格式导入。我使用的是csv。


导入数据.jpg

数据的格式是这样的,第一行为标题,下面为各项的内容。在导入的时候可能会遇到乱码的问题,可以通过另存为utf-8编码的csv。


导入数据2.jpg

4.参数传递问题

在第1步骤中,检索的期刊,绑定了bindtap="bindJournal"这样一个事件,点击期刊就可以跳转到期刊详情页面,这里需要将期刊名称参数传递给新页面的journal.js中。bindJournal函数代码如下

//页面跳转,传递期刊参数
  bindJournal: function (e) {
    var journal_trans = e.currentTarget.dataset.journal //获得点击的期刊名称
    console.log(e.currentTarget)
    var app = getApp();
    {
      app.requestdetailjournal = journal_trans;
    }
    wx.navigateTo({
      url: "../journal/journal"
    })
  },

然后,在journal.js中接收传递的数据:

onLoad: function (options) {
    var journalDetail = getApp().requestdetailjournal;
    this.setData({
journalDetail:journalDetail,
    })
    console.log(journalDetail);
    this.auto1()
  },

在这里,同样使用 this.auto1()来触发云开发数据库的读取。就得到以下数据结果:


期刊详情页.jpg

总结遇到的问题:

  1. 由于本地数据较多,微信小程序代码最大限制(2M)——使用云开发控制台的数据库。
  2. 上传csv到数据库的时候乱码问题——通过转换为utf-8编码的csv上传。
  3. 测试环境的存储桶被我从腾讯云网页删了,导致不能上传csv文件 ——目前不知道怎么解决,只能另外开通一个环境了,在数据库里添加了两个集合,供测试和正式发布用。
  4. 通过调用集合上的 where 方法可以指定查询条件,再调用 get 方法即可只返回满足指定查询条件的记录,获得的可能是多可数据的集合,不能直接显示集合中的内容——通过在渲染层来处理,打印集合结果。
  5. 参数传递问题——通过pp()方法与getApp()方法来解决。
  6. 第一次写这种技术类的文章,代码理解的不好,可能说的不够清楚——多看多写咯

最后,扫码来看一下实际效果吧


小程序码.jpg

相关文章

网友评论

    本文标题:云开发小程序构建实例——SCI期刊影响因子查询

    本文链接:https://www.haomeiwen.com/subject/jhltpqtx.html