/ nodejs

Sails+wechat(解决sails无法处理微信消息)

sails框架使用wechat 的时候能够通过验证却不能处理微信消息,原因是sails默认的bodyPaser(skipper)不支持'text/xml'形式的请求(sails issues#2714)

YunnuY同学使用pexpress-xml-bodyparserbody-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);
  };
}

目前程序能够正常处理微信消息和常规请求,如果出现问题我会及时更新。