请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Unhandled rejection Error: Non-whitespace before first tag.

看到很多同学都有这个错误,好像都说是模块导出错误,具体怎么改还是不甚清楚,报错如下:https://img1.sycdn.imooc.com/szimg//580e020a000149f311401030.jpg

如下是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//app.js
'use strict'
 
var Koa = require('koa')
var path = require('path')
var wechat = require('./wechat/g')
var util = require('./libs/util')
var wechat_file = path.join(__dirname,'./config/wechat.txt')
var config = {
    wechat:{
        appID:'wxfeac53b7ad50b5dc',
        appSecret:'d7912572793e386070d20a396790f951',
        token: 'freecodecamplxk',
 
        getAccessToken: function(){
            return util.readFileAsync(wechat_file)
        },
        saveAccessToken: function(data){
            data = JSON.stringify(data)
            return util.writeFileAsync(wechat_file,data)
        }
    }
}
 
var app = new Koa()
 
app.use(wechat(config.wechat))
 
app.listen(1234)
console.log('Listening : 1234')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//wechat目录下的g.js
'use strict'
 
var sha1 = require('sha1')
var getRawBody = require('raw-body')
var Wechat = require('./wechat')
var util = require('./util')
 
 
 
module.exports = function(opts){
    var wechat = new Wechat(opts)
 
    return function *(next){
 
        // console.log('wechat1')
        // console.log(this.query)
 
        var that = this
        var token = opts.token
        var signature = this.query.signature
        var nonce = this.query.nonce
        var timestamp = this.query.timestamp
        var echostr = this.query.echostr
 
        var str = [token,timestamp,nonce].sort().join('')
        var sha = sha1(str)
 
        if(this.method === 'GET'){
            if(sha === signature){
                this.body = echostr + ''
                // console.log('123456');
            }
            else{
                this.body = 'wrong'
            }
        }
        else if(this.method === 'POST'){
            if(sha !== signature){
                this.body = 'wrong'
                return false
            }
            // console.log('123');
            var data = yield getRawBody(this.req,{
                length: this.length,
                limit: '1mb',
                encoding: this.charset
            })
 
            console.log('test')
            console.log(data.toString())
            // parseXMLAsync 是为了把 XML 解析为 JS 对象
            var content = yield util.parseXMLAsync(data)
 
            console.log(content)
            console.log('123')
            // formatMessage 是为了把 JS 对象解析为扁平的 JS 对象
            var message = util.formatMessage(content.xml)
 
            console.log(message)
            console.log('lxk');
 
            if(message.MsgType === 'event'){
                if(message.Event === 'subscribe'){
                    var now = new Date().getTime()
 
                    that.status = 200
                    that.type = 'application/xml'
                    that.body = '<xml>' 
                    '<ToUserName><![CDATA[' + message.FromUserName + ']]></ToUserName>' 
                    '<FromUserName><![CDATA[' + message.ToUserName +']]></FromUserName>' 
                    '<CreateTime>' + now + '</CreateTime>' +
                    '<MsgType><![CDATA[text]]></MsgType>' 
                    '<Content><![CDATA[Hi, Imooc同学!!]]></Content>' +
                    '</xml>'
 
                    return
                }
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//wechat目录下的util.js
'use strict'
 
var xml2js = require('xml2js')
var Promise = require('bluebird')
 
exports.parseXMLAsync = function(xml){
    return new Promise(function(resolve, reject){
        xml2js.parseString(xml, {trim: true}, function(err,content){
            if (err) reject(err)
            else resolve(content)
        })
    })
}
 
function formatMessage(result){
    var message = {}
 
    if(typeof result === 'object'){
        var keys = Object.keys(result)
 
        for(var i = 0; i < keys.length; i++){
            var item = result[keys[i]]
            var key = key[i]
 
            if(!(item instanceof Array) || item.length === 0){
                continue
            }
 
            if(item.length ===1){
                var val = item[0]
 
                if(typeof val === 'object'){
                    message[key] = formatMessage(val)
                }
                else{
                    message[key] = (val || '').trim()
                }
            }
            else{
                message[key] = []
 
                for(var j = 0, k = item.length; j < k; j++){
                    message[key].push(formatMessage(item[j]))
                }
            }
        }
    }
    return message
}
 
exports.formatMessage = function(xml){
    console.log('456');
    return new Promise(function(resolve, reject){
        xml2js.parseString(xml, {trim: true}, function(err,content){
            if (err) reject(err)
            else resolve(content)
        })
    })
}
 
// exports.formatMessage = formatMessage


正在回答

插入代码

1回答

Scott 2016-10-24 22:10:06

exports.formatMessage = formatMessage


为什么注释掉这个代码呢,用这个才能把 message 对象进一步格式化出来,这一段


1
2
3
4
5
6
7
8
9
exports.formatMessage = function(xml){
    console.log('456');
    return new Promise(function(resolve, reject){
        xml2js.parseString(xml, {trim: true}, function(err,content){
            if (err) reject(err)
            else resolve(content)
        })
    })
}

可以删了

2 回复 有任何疑惑可以回复我~
  • 提问者 星辰Iron #1
    终于调通了,老激动了啊!
    回复 有任何疑惑可以回复我~ 2016-10-24 23:11:37
  • Elle绀 #2
    谢谢老师!!~~
    回复 有任何疑惑可以回复我~ 2017-08-22 00:08:27
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号