XXXIERW
  • 2
  • 新人请关照

nodejs中遇见了koa-route写法没错但是访问不到对应的文件

koa-route写法没错但是访问不到对应的文件

我尝试了很多方法包括将代码中的'/movie'改成'movie',也是不能用对,去翻了koa-router相关文档里面,看了一遍觉得自己写的那个请求是没有错的,希望大佬帮我看一下

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

var Koa = require('koa')
var Router = require('koa-router')
var router = new Router()
var game = require('./wx/game')
var wechat = require('./wx/wechat')
var app = new Koa()
router.get('/movie', game.movie)
//监听来自服务器的请求,无论是GET还是POST
router.get('/wx', wechat.hear)
router.post('/wx', wechat.hear)

//app.use(g(wx.wechatOptions.wechat,reply.reply))
app
    .use(router.routes())
    .use(router.allowedMethods())
app.listen(1234)
console.log('listening: 1234');

下面是对应的game.movie请求里面的代码

   'use strict'
//引入模块---和之前的tpl类似
var ejs = require('ejs')

//加密模块引入
var crypto = require('crypto')
var heredoc = require('heredoc')
var tpl = heredoc(function() {/*
<!DOCTYPE html>
<html>
    <head>
        <title>输入你想要的东西!!!</title>
        <meta name = "viewport" content = "initial-scale = 1, 
        maximum-scale = 1, minimum-scale = 1">
    </head>
    <body>
        <h1>CLICK TITLE START!!!</h1>
        <p id = 'title'></p>
        <div id = 'doctor'></div>
        <div id = 'year'></div>
        <div id = 'poster'></div>
        <script src="https://zeptojs.com/zepto.js"></script>
        <script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
        <script>
            wx.config({
                debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId: 'wxb84f1479a4b06e38', // 必填,公众号的唯一标识
                timestamp: '<%= timestamp%>', // 必填,生成签名的时间戳
                nonceStr: '<%= noncestr%>', // 必填,生成签名的随机串
                signature: '<%= signature%>',// 必填,签名
                jsApiList: [
                    'startRecord',
                    'stopRecord',
                    'onVoiceRecordEnd',
                    'translateVoice'
                ] // 必填,需要使用的JS接口列表
            })
            wx.ready(function(){
                wx.checkJsApi({
                jsApiList: ['onVoiceRecordEnd'], 
                success: function(res) {
                    console.log(res)
                }
                })
                var isRecording = false
                $('h1').on('tap',function() {
                if(!isRecording){
                        isRecording = true
                    wx.startRecord({
                        cancel: function() {
                            window.alert('那就不搜索了哦!')
                        }
                    })

                    return        
                }
                    isRecording = false

                     wx.stopRecord({
                        success: function (res) {
                        var localId = res.localId

                        wx.translateVoice({
                            localId: localId,
                            isShowProgressTips: 1, 
                            success: function (res) {
                                var result = res.translateResult
                                
                $.ajax({
                    type: 'get',
                    url: 
                    url: 'https://api.douban.com/v2/movie/search?q=' + result',
                    dataType: 'jsonp',
                    jsonp: 'callback',
                    success: function(data) {
                        
                    }

                })

                            }
                        })
                        }
                    })
                })
            })
            
        </script>
    </body>
</html>
*/})

//创建一个随机字符串
var createNonce = function() {
    return Math.random().toString(36).substr(2,15)
}
//以及时间戳    
var createTimestamp = function() {
    return parseInt(new Date().getTime() / 1000,10) + ''
}    
//定义一个_sign
var _sign = function(noncestr, ticket, timestamp, url) {
    //生成一个数组并进行排序
    var params = [
        'noncestr=' + noncestr,
        'jsapi_ticket=' + ticket,
        'timestamp=' + timestamp,
        'url=' + url
    ]
    //这些写法都是固定的不可以更改的
    //生成一个字符串并按字典排序
    var str = params.sort().join('&')
    //利用哈希算法进行加密
    var shasum = crypto.createHash('sha1')
    shasum.update(str)
    return shasum.digest('hex')
}
//最后实现一个签名的方法
function sign(ticket, url) {
    var noncestr = createNonce()//随机字符串
    var timestamp = createTimestamp()//时间戳
    var signature = _sign(noncestr, ticket, timestamp, url)
    console.log(noncestr)
    console.log(ticket)
    return {
        noncestr: noncestr,
        timestamp: timestamp,
        signature: signature
    }
}
var wx = require('./index')
exports.movie = function*(next) {
    var wechatApi = wx.getWechat()
    //初始化API
    var wechatApi = new Wechat(config.wechat)
    var data = yield wechatApi.fetchAccessToken()
    var access_token = data.access_token
    var ticketData = yield wechatApi.fetchTicket(access_token)
    var ticket = ticketData.ticket
    var url = this.href
    //将数据传入到上面的xml函数中
    var params = sign(ticket, url)
        this.body = ejs.render(tpl, params)

}

然后经过调试报出来的结果是

clipboard.png

控制台报出来的结果是

clipboard.png

希望大佬帮我看看是什么原因。或者是哪里出错了,谢谢咯!!!

阅读 364
评论 2019-07-24 提问
    2 个回答

    用async/await替代*/yield

    评论 赞赏 2019-07-24
      XXXIERW
      • 2
      • 新人请关照

      目前分析出来,出现这种原因是因为Koa升级到最新版本的原因,因为Koa升级后就不能直接使用

      router('/movie',game.movie)这个情况,虽然请求到了movie这个url但是没有进入中间件game.movie中而是要使用最新版本的写法
      router('/movie',async(ctx)=>{
      })
      这种写法,但是我不知道这种写法中间件要怎么请求,希望有大佬能帮我解决一下咯!

      评论 赞赏 2019-07-24
        撰写回答

        登录后参与交流、获取后续更新提醒