Ответ 1
Node.js не запускается в браузере, поэтому у вас не будет доступного объекта document
. На самом деле, у вас даже не будет дерева DOM. Если вы немного запутались в этом вопросе, я призываю вас прочитать больше об этом, прежде чем идти дальше.
Есть несколько методов, которые вы можете выбрать, чтобы делать то, что вы хотите.
Способ 1: подача файла напрямую через HTTP
Поскольку вы писали об открытии файла в браузере, почему бы вам не использовать среду, которая будет обслуживать файл непосредственно как HTTP-сервис, вместо двухэтапного процесса? Таким образом, ваш код будет более динамичным и легко обслуживаемым (не говоря уже о том, что ваш HTML всегда актуален).
Для этого есть множество рамок:
- Http (Node native API)
- соединять
- КоА
- Экспресс (используя Connect)
- Паруса (построить на Экспресс)
- Geddy
- CompoundJS
- и т. д.
Самый простой способ сделать то, что вы хотите, это:
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>';
};
И получите доступ к этому HTML с http://localhost:8080
из вашего браузера.
(Изменить: вы также можете обслуживать их с небольшим 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);
...
Вы должны думать "на стороне сервера", а не "на стороне клиента" при написании JavaScript для Node.js; вы не находитесь в браузере и/или не ограничены песочницей, кроме движка V8.
Дополнительное чтение, узнать о нпм. Надеюсь это поможет.