我正在尝试在 nodejs 中编写 HTML 文件。我需要使用所有 DOM 方法创建元素。我尝试了以下操作,但抛出错误 document is undefined
。请建议我做错了什么以及正确的方法是什么。谢谢
var fs = require('fs');
var myDiv= document.createElement("div");
myDiv.setAttribute("id","myDiv");'
var data = myDiv.outerHTML;
var writerStream = fs.createWriteStream('abcd.html');
writerStream.write(data,'UTF8');
writerStream.end();
writerStream.on('finish', function() { console.log("Write completed."); });
writerStream.on('error', function(err){ console.log(err.stack); });
console.log("Program Ended");
最佳答案
这个问题是因为没有可用的窗口对象。记住文档对象来自窗口。 我们写document的时候,其实就是window.document。 但是 nodejs 不提供 window 对象,因为它运行在服务器端。
为此,您可以使用名为 jsdom 的模块。在此处浏览 jsdom:https://www.npmjs.com/package/node-jsdom
安装 jsdom 并尝试类似的操作:
var jsdom = require('jsdom');
var fs = require('fs');
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8081);
console.log('Server running at http://127.0.0.1:8081/');
jsdom.env({
html: 'http://127.0.0.1:8081/',
src: [],
done: function(errors, window) {
var document = window.document;
var myDiv= document.createElement("div");
myDiv.setAttribute("id","myDiv");'
var data = myDiv.outerHTML;
var writerStream = fs.createWriteStream('abcd.html');
writerStream.write(data,'UTF8');
writerStream.end();
writerStream.on('finish', function() { console.log("Write completed."); });
writerStream.on('error', function(err){ console.log(err.stack); });
console.log("Program Ended");
}
});
关于javascript - 使用 HTML DOM 方法创建 HTML 文件并在 nodejs 中写入该 HTML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38762279/