当前位置:  开发笔记 > 编程语言 > 正文

Nodejs:wget,解压缩并转换为js而无需写入文件

如何解决《Nodejs:wget,解压缩并转换为js而无需写入文件》经验,为你挑选了0个好方法。

好吧标题说明了一切,我正在尝试编写一个利用库的脚本(在nodejs/express服务器端应用程序中运行)request,unzipxml2js执行一个包含从给定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应用程序时,我一无所知.干杯.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有