type未定义

来源:4-4 第四天 上传临时素材之图片和视频

莫大帅逼

2016-10-05

http://szimg.mukewang.com/57f3d4a90001e1ac16260210.jpg

老师 这里弄了很久还是不知道哪里错了 请老师帮我看一下吧

这是 wechat。js的代码

'use strict'

var Promise=require('bluebird');
var request = Promise.promisify(require('request'));
var util = require('./util');
var fs = require('fs')
var prefix='https://api.weixin.qq.com/cgi-bin/';
var api ={
   accessToken:prefix +'token?grant_type=client_credential',
   upload:prefix + 'media/upload?'
}

function Wechat(opts) {
   var that =this
   this.appID=opts.appID;
   this.appSecret=opts.appSecret;
   this.getAccessToken=opts.getAccessToken;
   this.saveAccessToken=opts.saveAccessToken;
   this.fetchAccessToken()

}

Wechat.prototype.fetchAccessToken =function (data) {
   var that = this
   if(this.access_token && this.expires_in){
       if(this.isValidAccessToken(this)){
           return Promise.resolve(this)
       }
   }
   this.getAccessToken()
       .then(function (data) {
           try{
               data=JSON.parse(data)
           }
           catch (e){
               return that.updateAccessToken(data)
           }
           if (that.isValidAccessToken(data)){
               return Promise.resolve(data)
           }else {
               return that.updateAccessToken()
           }
       })
       .then(function (data) {
           that.access_token=data.access_token
           that.expires_in=data.expires_in
           that.saveAccessToken(data)
           return Promise.resolve(data)
       })


};

Wechat.prototype.isValidAccessToken =function (data) {
   if (!data||!data.access_token||!data.expires_in){
       return false
   }
   var access_token=data.access_token
   var expires_in=data.expires_in
   var now =(new Date().getTime())

   if (now<expires_in){
       return true
   }else {
       return false
   }
}

/*更新数据*/
Wechat.prototype.updateAccessToken =function () {
   var appID= this.appID
   var appSecret =this.appSecret
   var url= api.accessToken +'&appid' +appID +'&secret'+appSecret
   return new  Promise(function (resolve,reject) {
       request({url:url,json:true}).then(function (response) {
           var data =response.body;  /*var data =response[1];*/
           var now =(new Date().getTime());
           var expires_in =now +(data.expires_in-20)*1000;

           data.expires_in =expires_in;
           resolve(data)
       })
   })

}

Wechat.prototype.uploadMaterial =function (type,filepath) {
   var that =this
   var form ={
       media:fs.createReadStream(filepath)
   }
   return new Promise(function (resolve,reject) {
       that
           .fetchAccessToken()
           .then(function (data) {
               var url= api.upload + 'access_token=' + data.access_token + '&type' + type
               request({method: 'POST',url:url,formData:form,json:true}).then(function (response) {
                   var _data =response.body;  /*var data =response[1];*/

                   if(_data){
                       resolve(_data)
                   }else {
                       throw new Error('upload material falis')
                   }
               })
               .catch(function (err) {
                   reject(err)
               });
           });
   })

}
Wechat.prototype.reply = function () {
   var content = this.body
   var message = this.weixin
   var xml = util.tpl(content,message)

   this.status =200
   this.type= 'application/xml'
   this.body = xml

}

module.exports= Wechat


写回答

6回答

Scott

2016-10-05

往上面逐步追溯代码就能看出来,access_token 是无效的,说明一开始获取的 token 要么是无效的,要么是过期了更新失败,导致你上传后拿到的 data.media_id 就是不合法的值,所以是 token 这里就出错了,在 token 获取和更新这块,可以尝试多加些 console 看看请求的 url 以及返回的 response.body 和 data 是不是都处理正确了,找到答案的方法比结果重要

0
3
莫大帅逼
回复
Scott
好的 谢谢老师
2016-10-06
共3条回复

Scott

2016-10-05

把原来的 access_token 从 txt 文件里删掉,重启一下服务试试

0
1
莫大帅逼
老师 还是不行 您看看截图
2016-10-05
共1条回复

Scott

2016-10-05

把 Wechat.prototype.fetchAccessToken 里面的

this.getAccessToken()


前面加上 return 试试



0
1
莫大帅逼
老师 有个小问题 请你再看一下
2016-10-05
共1条回复

莫大帅逼

提问者

2016-10-06

57f532aa0001b7f105000285.jpg

这是微信入口文件的代码

57f532c50001164c05000272.jpg

这是博客入口文件的代码


0
0

莫大帅逼

提问者

2016-10-05

//szimg.mukewang.com/57f50eae0001602418830957.jpg

老师 你看看

0
0

莫大帅逼

提问者

2016-10-05

//szimg.mukewang.com/57f497870001b55e18820702.jpg

老师 我按照你说的 改了 我顺便打印了一下data 他出现了40001 是怎么回事? 

0
0

7天搞定Node.js微信公众号

Koa框架、ES2015新特性、MongoDB,开发微信公众号

1742 学习 · 787 问题

查看课程