NodeJS如何用Stream替换客户端模板

时间:2016-03-01 18:01:44

标签: javascript node.js

我在NodeJS中有以下代码段。代码来自我正在处理的教程,但是您希望专注于else if(req.url === "/"){...}中的代码,因为这是我的问题发生的地方。在这段代码中,我使用readStream来获取HTML文件的内容,并使用pipe将这些内容发送到客户端的套接字地址。

所以,我在这里苦苦挣扎的是想要使用流来替换我的HTML文件中的{title},并在我的NodeJS文件中使用title变量。

我知道您可以通过readFileSync 同步来执行此操作但是我想尝试使用一个流,我理解它是异步并且是最好的在NodeJS中练习。

因此,由于我缺乏理解,我不确定如何使用流来执行此操作的正确方法,任何帮助都表示赞赏!

的NodeJS

'use strict'
var http = require('http'),
    fs = require('fs'),
    html = "",
    title = "Hello World", // <-- template text
    obj = {
        firstName: 'John',
        lastName: 'Doe'
    };

http.createServer(function(req, res){
    if(req.url === '/api'){
        res.writeHead(200, {'Content-Type': 'application/json'});
        res.end(JSON.stringify(obj));
    }
    else if(req.url === "/"){
        res.writeHead(200, {'Content-Type': 'text/html'});
        html = fs.createReadStream(__dirname + '/index.html');

        html.on('data', function(data){ // <-- here I try to use the template text
            data = data.toString().replace('{title}', title);
            console.log(data);
        });

        html.pipe(res);
    }
    else {
        // Accessing a URL not handled or specified above
        res.writeHead(404);
        res.end();
    }
}).listen(1337, '127.0.0.1');

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Learning NodeJS</title>
</head>
<body>
    <h1>{title}</h1>
</body>
</html>

编辑:现在,此代码不会将HTML中的{title}替换为Hello World。我重新启动了我的NodeJS服务器,以确保这不是我的代码没有正确刷新的简单情况。

免责声明:我正在学习NodeJS,请善待:)

2 个答案:

答案 0 :(得分:1)

修改数据中的局部变量&#39;事件处理函数不会改变响应中发送的数据。

而不是管道,将数据写入&#39;数据&#39;事件处理函数并结束“结束”中的响应事件处理函数。

只是修改后的位

ManyToManyField

答案 1 :(得分:0)

我建议您使用执行流式渲染的模板引擎。我认为thisthisthis是开始的好地方。