I am implementing REST API for merchant system. This merchant system sends payment confirmation POST request to my system to specified URL, and this request is encoded in windows-1251.
I’ve tried iron-router and restivus to handle this request, both of them failed with error
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
My current iron router code:
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']});
None of log statements are executed even during onBeforeAction hook.
The question is how to setup correct request decoding or to avoid body-parser that accepts only utf-8 encoded request, as I’ve found out.