akira-cn / think-wechat

微信中间件,同时支持 thinkJS 3.0
MIT License
73 stars 17 forks source link

控制台一直输出/wechat<>weixin/wechat #6

Closed yuexing0921 closed 7 years ago

yuexing0921 commented 7 years ago

按照官网的例子,控制台一直输出以下信息: /wechat<>weixin/wechat You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection: Error: PREVENT_NEXT_PROCESS

nodejs : 7.4 thinkjs : 2.2.16

yuexing0921 commented 7 years ago

现在这个错误发现是配置了二级域名导致的,weixin.xxx.com/wechat,

然后配置正确了但是无法获取微信端发送的数据,调查源码发现是hook导致的,

一开始路由解析是这样:

route_parse: ["prepend", "csrf", "subdomain","parse_wechat"]

修改成:

route_parse: ["prepend", "parse_wechat","csrf", "subdomain"]

parse_wechat一定要紧跟prepend后面才行,否则没有办法正确的解析。

yuexing0921 commented 7 years ago

现在新的问题来了,能接收到微信的发送的数据,但是进入controller到init后,__before(包含)后就不走了 , 直接用域名访问weixin.xxx.com/wechat/text能正常的进入到controller,并且打印信息

下面是我的代码路径 image

下面是wechat.js的源代码

export default class extends Base {
       init(http){
        super.init(http); 
        console.log("init");
        var message = this.post();
        console.log(message);

    }
    __before(){
        console.log('__before');
     }
    /**
     * index action
     * @return {Promise} []
     */
    indexAction(){
        console.log("indexAction");
        let echostr = this.get('echostr');
        return this.end(echostr);
    }
    reply(message){
        console.log("reply");
        this.http.res.reply(message);
    }
    textAction(){
        console.log("textAction");
        var message = this.post();
        var msg = message.Content.trim();
        this.reply('测试成功:'+msg);
    }
    eventAction(){
        console.log("eventAction");
        let message = this.post();
        console.log(message);
        this.reply(JSON.stringify(message));
    }
    __call(){
        console.log("__call");
        this.reply(DEFULT_AUTO_REPLY);
    }
}

@akira-cn 月影大大看看是怎么回事

yuexing0921 commented 7 years ago

目前已经暂时解决了,把hook.js的csrf组件去除掉就好了。 应该是微信提交的没有csrf的认证信息,所以导致被拦截了,坑爹的是,这个组件也没有提示。