我正在为商家系统实施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编码请求的正文解析器,我已经发现了。
更新 Ad hock解决方案是使用nginx将win-1251转换为utf8
答案 0 :(得分:0)
Ad hock解决方案是使用nginx将win-1251转换为utf8。