Node.js 生成HTML
Node.js 生成HTML
我创建了一个JavaScript程序,该程序生成了一份数据列表。以下是示例输出:
output one output two output three ...
我想要生成一个可以保存到磁盘并用浏览器打开的HTML文件,下面是我想要生成的HTML示例。
...
header 1 | header 2 | header 3 |
output one |
我尝试做了这个:
var htmlDoc = document.createElement("HMTL"); htmlDoc.innerhtml('...');
但这显然是错误的,因为文档对象不存在。
我认为这个问题很有意义,特别是通过它获得的赞数。可以重新打开它吗?
Node.js不能在浏览器中运行,因此您将无法使用document
对象。事实上,您甚至没有DOM树。如果您在这一点上有点困惑,我建议您在继续之前阅读更多内容。
有几种方法可供您选择以实现您的目标。
方法1:通过HTTP直接提供文件
因为您写的是打开文件在浏览器中的行为,那么为什么不使用一个框架将文件直接作为HTTP服务提供,而不是有一个两步骤的过程呢?这样,您的代码将更具动态性和易于维护(不要提您的HTML始终是最新的了)。
有许多框架可供选择,例如:
您可以使用最基本的方法实现您的目标:
var http = require('http'); http.createServer(function (req, res) { var html = buildHtml(req); res.writeHead(200, { 'Content-Type': 'text/html', 'Content-Length': html.length, 'Expires': new Date().toUTCString() }); res.end(html); }).listen(8080); function buildHtml(req) { var header = ''; var body = ''; // concatenate header string // concatenate body string return '' + '' + header + '' + body + ''; };
然后在浏览器中通过http://localhost:8080
访问此HTML。
方法2:仅生成文件
如果您要做的只是生成一些HTML文件,那么就简单点。为了访问文件系统上的IO,Node有一个API,文档可在这里找到。
var fs = require('fs'); var fileName = 'path/to/file'; var stream = fs.createWriteStream(fileName); stream.once('open', function(fd) { var html = buildHtml(); stream.end(html); });
注意:buildHtml
函数与方法1中完全相同。
方法3:将文件直接转储到stdout
这是最基本的Node.js实现,需要调用应用程序自己处理输出。在Node中输出某些内容(即输出到stdout
),最好的办法是使用console.log(message)
其中message
是任何字符串、对象等。
var html = buildHtml(); console.log(html);
注意: buildHtml
函数与方法1中的完全相同(再次)。
如果你的脚本叫做html-generator.js
(例如),在Linux/Unix系统中,简单地执行:
$ node html-generator.js > path/to/file
结论
因为Node是一个模块化的系统,你甚至可以将buildHtml
函数放在它自己的模块中,然后编写适配器来处理HTML,就像这样:
var htmlBuilder = require('path/to/html-builder-module'); var html = htmlBuilder(options); ...
当你为Node.js编写JavaScript时,你必须思考“服务器端”,而不是“客户端”;你不在浏览器中且不受沙箱的限制,除了V8引擎。
更多阅读,请学习npm。希望这有所帮助。