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 '<!DOCTYPE html>'
+ '<html><head>' + header + '</head><body>' + body + '</body></html>';
};
并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。
方法三:直接将文件转储到 stdout
这是最基本的 Node.js 实现,需要调用应用程序自己处理输出。要在 Node 中输出某些内容(即到 stdout),最好的方法是使用console.log(message)
wheremessage
是任何字符串或对象等。
var html = buildHtml();
console.log(html);
注:该buildHtml
功能是完全相同的相同方法1(再次)
如果您的脚本被调用html-generator.js
(例如),在基于 Linux/Unix 的系统中,只需执行
$ node html-generator.js > path/to/file
结论
因为 Node 是一个module化系统,你甚至可以把buildHtml
函数放在它自己的module中,然后简单地编写适配器来处理你喜欢的 HTML。就像是
var htmlBuilder = require('path/to/html-builder-module');
var html = htmlBuilder(options);
...
在为 Node.js 编写 JavaScript 时,您必须考虑“服务器端”而不是“客户端”;除了 V8 引擎之外,您没有使用浏览器和/或仅限于沙箱。
额外阅读,了解npm。希望这可以帮助。