好吧标题说明了一切,我正在尝试编写一个利用库的脚本(在nodejs/express服务器端应用程序中运行)request
,unzip
并xml2js
执行一个包含从给定URL获取zip文件的任务,其内容是一个xml文件,我需要解析为javascript对象进行进一步处理.
到目前为止,我已经设法提出:
var express = require("express"); var app = express(); /* some init code omitted */ var request = require("request"); var unzip = require("unzip"); var xml2js = require("xml2js"); var parser = new xml2js.Parser(); app.get("/import", function(req, res) { request("http://path.to/file.zip") .pipe(unzip.Parse()) .on("entry", function(entry) { //This is what I'm trying to avoid, which doesn't even work entry.pipe(fs.createWriteStream(entry.path)); fs.readFile(entry.path, function(err, data) { if(err) { return res.status(500).send(err); } parser.parseString(data, function(err, obj) { console.log(util.inspect(obj)); /* further processing of obj */ }); }); }); });
尽管xml文件的内容已正确写入磁盘,但我正在寻找这种方法的替代方法,原因有两个:
为了节省磁盘空间,因为一旦转换为js,我真的不需要保留xml文件
它甚至不起作用:fs.readFile
可能在fs.createWriteStream
完成写入之前开始读取文件,因为行console.log(utils.inspect(obj))
记录null
(如果我只运行最里面的fs.readFile
块并替换entry.path
为先前写入的文件的名称,它会产生所需的输出)
我希望我能为此记下一个jsFiddle,但是当谈到expressjs应用程序时,我一无所知.干杯.