我想管道一个可读的css文件到http响应



我有一个问题,输出可读流到http响应。

在后台有来自通用http createServer的常规请求和响应流。我检查一下是否需要。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();
    //});

});

你需要将你的可读流管道到你的直通流中,然后管道到响应中:

readable.pipe(thru).pipe(res);
要准备你的CSS路径,只需使用path。连接而不是连接路径并将其规范化:
var pathToCss = path.join(process.cwd(), cssFile);

我把这个路由(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);
    });
}

相关内容

  • 没有找到相关文章

最新更新