sails框架使用wechat 的时候能够通过验证却不能处理微信消息,原因是sails默认的bodyPaser(skipper)不支持'text/xml'形式的请求(sails issues#2714)
YunnuY同学使用pexpress-xml-bodyparser和body-parser覆盖了sails默认的bodyParser
https://github.com/YunnuY/sweat/blob/master/config/http.js
由于body-paser后来更新,所以这里的代码要稍微修改一下,将
var bodyParser = require('body-parser')();
修改为
var bodyParser = require('body-parser')().json();
但是公司的项目中还有包含文件的请求,此时body-paser就不能满足需求了,因此还是要重新使用sails默认的skipper,代码如下:
bodyParser: function() {
var xmlParser = require('express-xml-bodyparser')();
var skipper = require('skipper')();
return function(req, res, next) {
if (req.headers && (req.headers['content-type'] == 'text/xml' ||
req.headers['content-type'] == 'application/xml')) {
return xmlParser(req, res, next);
}
return skipper(req, res, next);
};
}
目前程序能够正常处理微信消息和常规请求,如果出现问题我会及时更新。