Express.js 代理管道将 XML 转换为 JSON
Express.js proxy pipe translate XML to JSON
对于我的前端 (angular) 应用程序,我需要连接到不支持 CORS 的外部 API。
所以我解决这个问题的方法是在 Node.JS / Express.JS 中有一个简单的代理来传递请求。额外的好处是我可以在代理级别设置我的 api-凭据,而不必将它们传递到用户可能 steal/abuse 它们的前端。
一切正常。
这是记录的代码:
var request = require('request');
var config = require('./config');
var url = config.api.endpoint;
var uname = config.api.uname;
var pword = config.api.pword;
var headers = {
"Authorization" : 'Basic ' + new Buffer(uname + ':' + pword).toString('base64'),
"Accept" : "application/json"
};
exports.get = function(req, res) {
var api_url = url+req.url;
var r = request({url: api_url, headers: headers});
req.pipe(r).pipe(res);
};
我必须使用的 API-端点只有 XML 作为输出格式。所以我在前端使用 xml2js 将 XML 响应转换为 JSON.
这也很好用,但我想减轻客户端的负载,并在服务器上执行 XML -> JSON 解析步骤。
我想我必须创建类似的东西:
req.pipe(r).pipe(<convert_xml_to_json>).pipe(res);
但我不知道如何创建类似的东西。
所以基本上我想创建一个 XML 到 JSON 代理作为一个已经存在的 API.
之上的层
SO 上有很多关于 "how do I make a proxy" 和 "how do I convert XML to JSON" 的问题,但我找不到将两者结合起来的问题。
你需要使用transform stream and for xml to json conversion you need some library i use this xml2json
..然后你像这样使用它(简化但它也应该适用于请求)
var http = require('http');
var fs = require('fs');
var parser = require('xml2json');
var Transform = require('stream').Transform;
function xmlParser () {
var transform = new Transform();
transform._transform = function(chunk, encoding, done) {
chunk = parser.toJson(chunk.toString())
console.log(chunk);
this.push(chunk);
done();
};
transform.on('error', function (err) {
console.log(err);
});
return transform;
}
var server = http.createServer(function (req, res) {
var stream = fs.createReadStream(__dirname + '/data.xml');
stream.pipe(xmlParser()).pipe(res);
});
server.listen(8000);
对于我的前端 (angular) 应用程序,我需要连接到不支持 CORS 的外部 API。
所以我解决这个问题的方法是在 Node.JS / Express.JS 中有一个简单的代理来传递请求。额外的好处是我可以在代理级别设置我的 api-凭据,而不必将它们传递到用户可能 steal/abuse 它们的前端。
一切正常。
这是记录的代码:
var request = require('request');
var config = require('./config');
var url = config.api.endpoint;
var uname = config.api.uname;
var pword = config.api.pword;
var headers = {
"Authorization" : 'Basic ' + new Buffer(uname + ':' + pword).toString('base64'),
"Accept" : "application/json"
};
exports.get = function(req, res) {
var api_url = url+req.url;
var r = request({url: api_url, headers: headers});
req.pipe(r).pipe(res);
};
我必须使用的 API-端点只有 XML 作为输出格式。所以我在前端使用 xml2js 将 XML 响应转换为 JSON.
这也很好用,但我想减轻客户端的负载,并在服务器上执行 XML -> JSON 解析步骤。
我想我必须创建类似的东西:
req.pipe(r).pipe(<convert_xml_to_json>).pipe(res);
但我不知道如何创建类似的东西。
所以基本上我想创建一个 XML 到 JSON 代理作为一个已经存在的 API.
之上的层SO 上有很多关于 "how do I make a proxy" 和 "how do I convert XML to JSON" 的问题,但我找不到将两者结合起来的问题。
你需要使用transform stream and for xml to json conversion you need some library i use this xml2json
..然后你像这样使用它(简化但它也应该适用于请求)
var http = require('http');
var fs = require('fs');
var parser = require('xml2json');
var Transform = require('stream').Transform;
function xmlParser () {
var transform = new Transform();
transform._transform = function(chunk, encoding, done) {
chunk = parser.toJson(chunk.toString())
console.log(chunk);
this.push(chunk);
done();
};
transform.on('error', function (err) {
console.log(err);
});
return transform;
}
var server = http.createServer(function (req, res) {
var stream = fs.createReadStream(__dirname + '/data.xml');
stream.pipe(xmlParser()).pipe(res);
});
server.listen(8000);