gpt4 book ai didi

javascript - Express.js 代理管道将 XML 转换为 JSON

转载 作者:行者123 更新时间:2023-12-03 10:17:08 26 4
gpt4 key购买 nike

对于我的前端( Angular )应用程序,我需要连接到不支持 CORS 的外部 API。

所以我解决这个问题的方法是在 Node.JS/Express.JS 中有一个简单的代理来传递请求。额外的好处是我可以在代理级别设置我的 api 凭据,而不必将它们传递到用户可能窃取/滥用它们的前端。

这一切都运行得很完美。

这是代码,供记录:

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 上有很多关于“如何制作代理”和“如何将 XML 转换为 JSON”的问题,但我找不到任何将两者结合起来的问题。

最佳答案

您需要使用transform stream对于 xml 到 json 的转换,您需要一些库,我使用这个 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);

关于javascript - Express.js 代理管道将 XML 转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29815823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com