【发布时间】:2017-05-17 19:03:30
【问题描述】:
我正在为商家系统实现 REST API。这个商户系统向我的系统发送支付确认POST请求到指定的URL,这个请求编码在windows-1251中。
我已经尝试过 Iron-router 和 restivus 来处理这个请求,它们都失败了并出现错误
UnsupportedMediaTypeError: unsupported charset "WINDOWS-1251"
at Object.urlencodedParser [as handle] (/home/dev/builds/bundle/programs/server/npm/node_modules/meteor/simple_json-routes/node_modules/connect/node_modules/body-parser/lib/types/urlencoded.js:102:12)
at next (/home/dev/builds/bundle/programs/server/npm/node_modules/meteor/webapp/node_modules/connect/lib/proto.js:174:15)
at middleware (packages/oauth.js:107:7)
at packages/oauth.js:96:5
我目前的铁路由器代码:
Router.route('/api/payments/result/',{where: "server", name: 'payments-result'})
.post(function () { });
Router.onBeforeAction(function (req, res, next) {
logger.info('GOT A CONFIRMATION REQUEST');
logger.info(`request headers are: ${req.rawHeaders}`);
logger.info('request is: ');
Object.keys(req.body).forEach(key => {
let val = req.body[key];
logger.info(`${key} : ${val}`);
});
res.end('hello from the server\n');
},{where: 'server', only: ['payments-result']});
即使在 onBeforeAction 钩子期间,也不会执行任何日志语句。
问题是如何设置正确的请求解码或避免正文解析器只接受 utf-8 编码的请求,正如我发现的那样。
更新 临时解决方案是使用 nginx 将 win-1251 转换为 utf8
【问题讨论】:
标签: post meteor iron-router body-parser