Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用HTMLDOM方法创建HTML文件,并在nodejs中写入该HTML文件_Javascript_Html_Node.js - Fatal编程技术网

Javascript 使用HTMLDOM方法创建HTML文件,并在nodejs中写入该HTML文件

Javascript 使用HTMLDOM方法创建HTML文件,并在nodejs中写入该HTML文件,javascript,html,node.js,Javascript,Html,Node.js,我正在尝试用nodejs编写HTML文件。我需要使用所有DOM方法创建元素。我尝试了以下操作,但抛出的错误文档未定义。请告诉我我做错了什么,正确的方法是什么。谢谢 var fs = require('fs'); var myDiv= document.createElement("div"); myDiv.setAttribute("id","myDiv");' var data = myDiv.outerHTML; var writerStream = fs.createWrit

我正在尝试用nodejs编写HTML文件。我需要使用所有DOM方法创建元素。我尝试了以下操作,但抛出的错误
文档未定义
。请告诉我我做错了什么,正确的方法是什么。谢谢

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");

此问题是因为没有可用的窗口对象。记住文档对象来自窗口。 当我们编写文档时,它实际上是window.document。 但是nodejs不提供窗口对象,因为它在服务器端运行

为此,您可以使用名为jsdom的模块。在这里浏览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");

  }
});

关于为什么它没有在nodejs中定义,请看这里:是的,我查看它。但它指出了问题所在。不告诉如何实现此目的如何安装jsdomnpm安装节点-jsdom@TuhinOP提出了一个可以用多种方式回答的问题。其中之一是“使用jsdom”。这并不保证在问题中添加标签。所以我恢复了你的编辑。如果OP专门问了一个关于jsdom的问题,那也没关系,但这里的情况不是这样的。。那我就搬走