Node.js 生成HTML

15 浏览
0 Comments

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('...');

但这显然是错误的,因为文档对象不存在。

我认为这个问题很有意义,特别是通过它获得的赞数。可以重新打开它吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

尽管@yanick-rochon的答案是正确的,但如果您的目标是提供动态生成的html,最简单的方法是:

var http = require('http');
http.createServer(function (req, res) {
  res.write('');
  res.write('

Write your HTML content here

'); res.end(''); }).listen(1337);

这样,当您在http://localhost:1337浏览时,您将获得您的html页面。

0
0 Comments

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。

(编辑:您也可以使用小型HTTP 服务器提供它们。)


方法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。希望这有所帮助。

0