Javascript Express.js代理管道将XML转换为JSON
对于我的前端(angular)应用程序,我需要连接到不支持CORS的外部API 因此,我的解决方法是在Node.JS/Express.JS中使用一个简单的代理来传递请求。另外一个好处是,我可以在代理级别设置api凭据,而不必将它们传递到前端,用户可能会在前端窃取/滥用它们 这一切都很完美 以下是代码,以供记录:Javascript Express.js代理管道将XML转换为JSON,javascript,xml,json,express,proxy,Javascript,Xml,Json,Express,Proxy,对于我的前端(angular)应用程序,我需要连接到不支持CORS的外部API 因此,我的解决方法是在Node.JS/Express.JS中使用一个简单的代理来传递请求。另外一个好处是,我可以在代理级别设置api凭据,而不必将它们传递到前端,用户可能会在前端窃取/滥用它们 这一切都很完美 以下是代码,以供记录: var request = require('request'); var config = require('./config'); var url = config.api.e
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);
req.pipe(r.pipe().pipe(res);
但我不知道你是如何创造这样的东西的
因此,基本上,我希望在现有API的基础上创建一个XML到JSON代理层
关于“如何制作代理”和“如何将XML转换为JSON”有很多问题,但我找不到任何将两者结合起来的问题。您需要使用,而对于XML到JSON的转换,您需要一些我使用的库
…然后你像这样使用它(简化了,但它也应该与请求一起工作)
谢谢这起作用了。让它工作起来有些困难,但后来我意识到我使用的是xml2js而不是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);