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)
}
然后经过调试报出来的结果是
控制台报出来的结果是
希望大佬帮我看看是什么原因。或者是哪里出错了,谢谢咯!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
用async/await替代*/yield
目前分析出来,出现这种原因是因为Koa升级到最新版本的原因,因为Koa升级后就不能直接使用
router('/movie',game.movie)这个情况,虽然请求到了movie这个url但是没有进入中间件game.movie中而是要使用最新版本的写法
router('/movie',async(ctx)=>{
})
这种写法,但是我不知道这种写法中间件要怎么请求,希望有大佬能帮我解决一下咯!