Cannot read property 'then' of undefined
来源:4-4 第四天 上传临时素材之图片和视频
甫里
2016-06-18
'use strict' var Promise=require('bluebird'); var request=Promise.promisify(require('request')); var prefix='https://api.weixin.qq.com/cgi-bin/'; var fs = require('fs') var util = require('./util') 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.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.fetchAccessToken = function() { var that = this; if (this.access_token && this.expires_in) { if (this.isValidAccessToken(this)) { return Promise.resolve(this) } } that.getAccessToken() .then(function(data){ try{ data=JSON.parse(data); } catch(e){ return that.updataAccessToken() } if (that.isValidAccessToken(data)) { return Promise.resolve(data) }else{ return that.updataAccessToken() } }) .then(function(data){ that.access_token=data.access_token; that.expires_in=data.expires_in; that.saveAccessToken(data); return Promise.resolve(data); }) } Wechat.prototype.uploadMaterial = function(type,filepath) { console.log(filepath) var form ={ media:fs.createReadStream(filepath) } var that = this; 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; console.log(_data) if (_data) { resolve(_data); } else { throw new Error("Upload meterial fails"); } }) .catch(function(err) { reject(err) }) }) }) } Wechat.prototype.updataAccessToken = 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 now = (new Date().getTime()) var expires_in = now+(data.expires_in-20)*1000 data.expires_in = expires_in; resolve(data) }) }) } Wechat.prototype.reply = function() { var content = this.body; var message = this.weixin; console.log(content) var xml = util.tpl(content,message); this.status = 200; this.type = 'application/xml'; this.body = xml }; module.exports=Wechat;
不知道哪里错了~一直找不出来
4回答
-
甫里
提问者
2016-06-18
已经完美解决了~
112016-06-28 -
qq_菜花_0
2017-03-23
求解决方案........
00 -
昌隆
2016-07-16
666
00 -
甫里
提问者
2016-06-29
return that.getAccessToken()
.then(function(data){
try{
data=JSON.parse(data);
}
catch(e){
return that.updataAccessToken()
}
if (that.isValidAccessToken(data)) {
return Promise.resolve(data)
}else{
return that.updataAccessToken()
}
})
.then(function(data){
that.access_token=data.access_token;
that.expires_in=data.expires_in;
that.saveAccessToken(data);
return Promise.resolve(data);
})
00
相似问题