【问题标题】:I want to pipe a readable css file to the http response我想将可读的 css 文件通过管道传输到 http 响应
【发布时间】:2014-06-19 14:37:41
【问题描述】:

我在将可读流输出到 http 响应时遇到问题。

在幕后有一个来自通用 http createServer 的常规请求和响应流。我检查“req.url”是否以 css 结尾,然后创建该文件的可读流。我在 console.log 中看到了 css 内容,以及我期望的正确 css 代码。然后,我尝试将可读的 css 文件流通过管道传输到响应,但是在 Chrome 中,当我检查响应时,文件响应是空白的。这是一个 200 响应。乍一看有什么想法吗?我尝试了代码注释掉的不同变体。

router.addRoute("[a-aA-z0-9]{1,50}.css$", function(matches){
    var cssFile = matches[0];
    var pathToCss = process.cwd() + "/" +  cssFile;
    // takes care of os diffs regarding path delimiters and such
    pathToCss = path.normalize(pathToCss);
    console.log(matches);
    console.log("PATH TO CSS");
    console.log(pathToCss)
    var readable = fs.createReadStream(pathToCss);

    var write = function(chunk){
        this.queue(chunk.toString());
        console.log(chunk.toString());
    }
    var end = function(){
        this.queue(null);
    }
    var thru = through(write,end);
    //req.on("end",function(){
        res.pipe(readable.pipe(thru)).pipe(res);
        //res.end();
    //});


});

【问题讨论】:

    标签: node.js http stream readable


    【解决方案1】:

    您需要将您的可读流通过管道传输到您的直通流中,然后将其通过管道传输到响应中:

    readable.pipe(thru).pipe(res);
    

    编辑:为准备您的 css 路径,只需使用 path.join 而不是连接您的路径并对其进行规范化:

    var pathToCss = path.join(process.cwd(), cssFile);
    

    【讨论】:

    • 感谢您的帮助,我使用 var pathToCss = path.basename(cssFile); 而不是加入路径,毕竟,我是在文件名本身之后,而不是通往它的路径。
    【解决方案2】:

    我将这条路由(css)从我的正常 html 生成路由中分离出来,我遇到的问题是我的路由器对象中的正常路由返回了字符串,如res.end(compiled_html_str),并且 css 文件可读流也经历了同样的事情路由功能。我把它和我的路由器隔离开来。

    var cssMatch = [];
    
    if(cssMatch = req.url.match(/.+\/(.+\.css$)/)){
    
        res.writeHead({"Content-Type":"text/css"});
    
        var cssFile = cssMatch[1];
    
        var pathToCss = process.cwd() + "/" +  cssFile;
    
        // takes care of os diffs regarding path delimiters and such
    
        pathToCss = path.normalize(pathToCss);
    
        console.log(cssMatch);
    
        console.log("PATH TO CSS");
    
        console.log(pathToCss)
    
        var readable = fs.createReadStream(pathToCss);
    
        var cssStr = "";
    
        readable.on("data",function(chunk){
    
            cssStr += chunk.toString();
    
        });
    
        readable.on("end",function(){
    
            res.end(cssStr);
    
        });
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-01
      • 2013-04-25
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2018-06-04
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多