鍍金池/ 問答/Linux  HTML/ qcloud+mpvue+koa1.1.3無法路由

qcloud+mpvue+koa1.1.3無法路由

src/me.vue下的scanBook方法是能正常獲取圖書的ISBN的,問題出在同頁面下的async addBook 方法種,正常登錄后,添加圖書的時候,怎么都觸發(fā)不了/weapp/addbook的路由,試了N種方法,目錄server/controllers/addbook.js路由配置了,但實際運行中根本訪問不到,相當郁悶.

相關代碼

// Me.vue

<template>
  <div class="container">
    <div class="userinfo">
      <img :src="userinfo.avatarUrl">
      <p>{{userinfo.nickName}}</p>
    </div>
    <YearProgress></YearProgress>

    <button v-if='userinfo.openId' @click='scanBook' class='btn'>添加圖書</button>
    <button v-else open-type="getUserInfo" lang="zh_CN" class='btn' @getuserinfo='login' >點擊登錄</button>
  </div>
</template>

<script>
import qcloud from 'wafer2-client-sdk'
import YearProgress from '@/components/YearProgress'
import {showSuccess, post} from '@/util'
import config from '@/config'

export default {
  components: {
    YearProgress
  },
  data () {
    return {
      userinfo: {
        avatarUrl: 'http://image.shengxinjing.cn/rate/unlogin.png',
        nickName: ''
      }
    }
  },
  methods: {
     async addBook (isbn) {
      console.log(isbn)
      const res = await post('/weapp/addbook',{
        isbn,
        openid:this.userinfo.openId
      })
      // showModal('添加成功',`${res.title}添加成功`)
    },
    scanBook () {
      wx.scanCode({
        success: (res) => {
          if (res.result) {
            this.addBook(res.result)
          }
        }
      })
    },

    getWxLogin: function ({encryptedData, iv, userinfo}) {
      const self = this
      wx.login({
        success: function (loginResult) {
          console.log('loginResult', loginResult)
          var loginParams = {
            code: loginResult.code,
            encryptedData: encryptedData,
            iv: iv
          }
          qcloud.setLoginUrl(config.loginUrl)
          qcloud.requestLogin({
            loginParams,
            success () {
              // 獲取用戶信息
              qcloud.request({
                url: config.userUrl,
                login: true,
                success (userRes) {
                  showSuccess('登錄成功')
                  wx.setStorageSync('userinfo', userRes.data.data)
                  self.userinfo = userRes.data.data
                }
              })
            },
            fail (error) {
              console.log(error)
              // showModal('登錄失敗', error)
            }
          })
        },
        fail: function (loginError) {
          // showModal('登錄失敗', error)
          console.log(loginError)
        }
      })
    },

    login (e) {
      const self = this
      // 查看是否授權
      wx.getSetting({
        success: function (res) {
          // 授權信息里有用戶信息
          if (res.authSetting['scope.userInfo']) {
            // 檢查用戶登錄是否過期
            wx.checkSession({
              success: function () {
                // 沒過期 直接成功
                showSuccess('登錄成功')
              },
              fail: function () {
                // 過期了 重新登錄 先清除登錄的狀態(tài)
                qcloud.clearSession()
                // 登錄狀態(tài)已過期 需要重新登錄
                // 登錄需要的加密信息
                var options = {
                  encryptedData: e.mp.detail.encryptedData,
                  iv: e.mp.detail.iv,
                  userinfo: e.mp.detail.userInfo
                }
                self.getWxLogin(options)
              }
            })
          } else {
            // showModal('用戶未授權', e.mp.detail.errMsg)
            console.log('用戶未授權', e.mp.detail.errMsg)
          }
        }
      })
    }
  },
  onShow () {
    let userinfo = wx.getStorageSync('userinfo')
    if (userinfo) {
      this.userinfo = userinfo
    }
  }
}
</script>

<style lang='scss'>
.container{
  padding:0 30rpx;

  .userinfo{
    margin-top: 100rpx;
    text-align: center;
    img {
      width: 150rpx;
      height: 150rpx;
      margin: 20rpx;
      border-radius: 50%
    }
  }
}
</style>
wafer2-quickstart-nodejs-master插件的server目錄,my-project/server/routes/index.js
/**
 * ajax 服務路由集合
 */
const router = require('koa-router')({
    prefix: '/weapp'
})
const controllers = require('../controllers')

// 從 sdk 中取出中間件
// 這里展示如何使用 Koa 中間件完成登錄態(tài)的頒發(fā)與驗證
const { auth: { authorizationMiddleware, validationMiddleware } } = require('../qcloud')

// --- 登錄與授權 Demo --- //
// 登錄接口
router.get('/login', authorizationMiddleware, controllers.login)
// 用戶信息接口(可以用來驗證登錄態(tài))
router.get('/user', validationMiddleware, controllers.user)

// --- 圖片上傳 Demo --- //
// 圖片上傳接口,小程序端可以直接將 url 填入 wx.uploadFile 中
router.post('/upload', controllers.upload)

// --- 信道服務接口 Demo --- //
// GET  用來響應請求信道地址的
router.get('/tunnel', controllers.tunnel.get)
// POST 用來處理信道傳遞過來的消息
router.post('/tunnel', controllers.tunnel.post)

// --- 客服消息接口 Demo --- //
// GET  用來響應小程序后臺配置時發(fā)送的驗證請求
router.get('/message', controllers.message.get)
// POST 用來處理微信轉(zhuǎn)發(fā)過來的客服消息
router.post('/message', controllers.message.post)

router.get('/demo', controllers.demo)
router.post('/addbook', controllers.addbook)
module.exports = router
wafer2-quickstart-nodejs-master插件的server目錄,my-project/server/controllers/addbook.js
const https = require('https')

module.exports = async (ctx) => {
    const { isbn, openid } = ctx.request.body
    console.log('添加圖書', isbn, openid)
    if (isbn && openid) {
        let url = 'https://api.douban.com/v2/book/isbn/' + isbn
        console.log(url)
        const bookinfo = await getJSON(url)
        const rate = bookinfo.rating.average
        const { title, image, alt, publisher, summary, price } = bookinfo
        console.log(bookinfo)
    } else {
        console.log(22222)
    }
}

function getJSON (url) {
    return new Promise((resolve, reject) => {
        https.get(url, res => {
            let urlData = ''
            res.on('data', data => {
                urlData += data
            })
            res.on('end', data => {
                const bookinfo = JSON.parse(data)
                if (bookinfo.title) {
                    resolve(bookinfo)
                }
                reject(bookinfo)
            })
        })
    })
}
項目主配置json
{
  "name": "mpvue-demo",
  "version": "1.0.0",
  "description": "A Mpvue project",
  "author": "3581729170@qq.com",
  "private": true,
  "scripts": {
    "dev": "node build/dev-server.js",
    "start": "node build/dev-server.js",
    "build": "node build/build.js",
    "lint": "eslint --fix --ext .js,.vue src"
  },
  "dependencies": {
    "mpvue": "^1.0.11",
    "vuex": "^3.0.1",
    "wafer2-client-sdk": "^1.1.3"
  },
  "devDependencies": {
    "babel-core": "^6.22.1",
    "babel-eslint": "^8.2.3",
    "babel-loader": "^7.1.1",
    "babel-plugin-transform-runtime": "^6.22.0",
    "babel-preset-env": "^1.3.2",
    "babel-preset-stage-2": "^6.22.0",
    "babel-register": "^6.22.0",
    "chalk": "^2.4.0",
    "connect-history-api-fallback": "^1.3.0",
    "copy-webpack-plugin": "^4.5.1",
    "css-loader": "^0.28.11",
    "cssnano": "^3.10.0",
    "eslint": "^4.19.1",
    "eslint-config-standard": "^11.0.0",
    "eslint-friendly-formatter": "^4.0.1",
    "eslint-loader": "^2.0.0",
    "eslint-plugin-html": "^4.0.3",
    "eslint-plugin-import": "^2.11.0",
    "eslint-plugin-node": "^6.0.1",
    "eslint-plugin-promise": "^3.4.0",
    "eslint-plugin-standard": "^3.0.1",
    "eventsource-polyfill": "^0.9.6",
    "express": "^4.16.3",
    "extract-text-webpack-plugin": "^3.0.2",
    "file-loader": "^1.1.11",
    "friendly-errors-webpack-plugin": "^1.7.0",
    "glob": "^7.1.2",
    "html-webpack-plugin": "^3.2.0",
    "http-proxy-middleware": "^0.18.0",
    "mpvue-loader": "1.0.13",
    "mpvue-template-compiler": "^1.0.11",
    "mpvue-webpack-target": "^1.0.0",
    "node-sass": "^4.9.2",
    "optimize-css-assets-webpack-plugin": "^3.2.0",
    "ora": "^2.0.0",
    "portfinder": "^1.0.13",
    "postcss-loader": "^2.1.4",
    "postcss-mpvue-wxss": "^1.0.0",
    "prettier": "~1.12.1",
    "px2rpx-loader": "^0.1.10",
    "rimraf": "^2.6.0",
    "sass-loader": "^7.0.3",
    "semver": "^5.3.0",
    "shelljs": "^0.8.1",
    "uglifyjs-webpack-plugin": "^1.2.5",
    "url-loader": "^1.0.1",
    "vue-style-loader": "^4.1.0",
    "webpack": "^3.11.0",
    "webpack-bundle-analyzer": "^2.2.1",
    "webpack-dev-middleware-hard-disk": "^1.12.0",
    "webpack-merge": "^4.1.0",
    "webpack-mpvue-asset-plugin": "0.0.2"
  },
  "engines": {
    "node": ">= 4.0.0",
    "npm": ">= 3.0.0"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}
項目的config.json
{
    "description": "項目配置文件。",
    "setting": {
        "urlCheck": false,
        "es6": false,
        "postcss": true,
        "minified": true,
        "newFeature": true
    },
    "miniprogramRoot": "./dist/",
    "qcloudRoot": "./server/",
    "compileType": "miniprogram",
    "appid": "wx73a95869c3086bce",
    "projectname": "mpvue-demo",
    "condition": {
        "search": {
            "current": -1,
            "list": []
        },
        "conversation": {
            "current": -1,
            "list": []
        },
        "game": {
            "currentL": -1,
            "list": []
        },
        "miniprogram": {
            "current": -1,
            "list": []
        }
    }
}
完整代碼包在這里(包括可以識別的圖書二維碼)-----> 百度網(wǎng)盤

請哪位知道的,指點下問題出在哪里?謝謝!

回答
編輯回答
舊時光

知道什么問題了,nnd,手誤,util里的函數(shù)參數(shù)位置寫顛倒了

2018年2月25日 17:01