我在NodeJS中有以下代码段。代码来自我正在处理的教程,但是您希望专注于else if(req.url === "/"){...}
中的代码,因为这是我的问题发生的地方。在这段代码中,我使用readStream
来获取HTML文件的内容,并使用pipe
将这些内容发送到客户端的套接字地址。
所以,我在这里苦苦挣扎的是想要使用流来替换我的HTML文件中的{title}
,并在我的NodeJS文件中使用title
变量。
我知道您可以通过readFileSync
同步来执行此操作但是我想尝试使用一个流,我理解它是异步并且是最好的在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');
<!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,请善待:)