Ошибка: не удается найти модуль html
Я долго не использовал Node.js и никогда не использовал express. Когда я начал свое приложение, он просто вернулся:
Error: Cannot find module 'html'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at new View (C:\Users\fr\node_modules\express\lib\view.js:42:49)
at Function.app.render (C:\Users\fr\node_modules\express\lib\application.js:483:12)
at ServerResponse.res.render (C:\Users\fr\node_modules\express\lib\response.js:755:7)
at allClients (C:\Users\fr\node_modules\apps\chat.js:13:7)
at callbacks (C:\Users\fr\node_modules\express\lib\router\index.js:161:37)
at param (C:\Users\fr\node_modules\express\lib\router\index.js:135:11)
Ошибка при запуске test.html. Здесь код:
var io = require('socket.io');
var express = require('express');
var app = express(),
http = require('http'),
server = http.createServer(app),
socket = require('socket.io').listen(server);
app.configure(function(){
app.use(express.static(__dirname));
});
app.get('/', function(req, res, next){
res.render('./test.html');
});
server.listen(8333);
Мой путь:
node_modules/
express/
socket.io/
apps/
chat.js
test.html
Почему?
EDIT:
Это мой новый app.configure:
app.configure(function(){
app.use(express.static(path.join(__dirname, 'public')));
});
Но он возвращает:
path is not defined
Ответы
Ответ 1
Я предполагаю, что test.html является статическим файлом. Для рендеринга статических файлов используйте статическое промежуточное ПО, например, так.
app.use(express.static(path.join(__dirname, 'public')));
Это заставляет экспресс искать статические файлы в публичном каталоге приложения.
После того, как вы определили это, просто наведите ваш браузер на местоположение файла, и он должен отобразиться.
Однако, если вы хотите визуализировать представления, вы должны использовать соответствующий рендерер для него. Список рендеров определен в консолидации. Как только вы решили, какую библиотеку использовать, просто установите его. Я использую усы, так что здесь приведен фрагмент моего файл конфигурации
var engines = require('consolidate');
app.set('views', __dirname + '/views');
app.engine('html', engines.mustache);
app.set('view engine', 'html');
Что это делает, это сказать экспресс
-
искать файлы для рендеринга в каталоге views
-
Рендеринг файлов с использованием усов
-
Расширение файла .html (вы также можете использовать .mustache)
Ответ 2
Простым способом является использование механизма шаблонов EJS для работы с файлами .html. Поместите эту строку рядом с настройкой механизма просмотра:
app.engine('html', require('ejs').renderFile);
Ответ 3
Это то, что я сделал для рендеринга html файлов. И он решил ошибки.
Установите консолидировать и усы, выполнив следующую команду в папке проекта.
$ sudo npm install consolidate mustache --save
И внесите следующие изменения в файл app.js
var engine = require('consolidate');
app.set('views', __dirname + '/views');
app.engine('html', engine.mustache);
app.set('view engine', 'html');
И теперь html-страницы будут отображаться правильно.
Ответ 4
Я думаю, вам может потребоваться объявить механизм просмотра.
Если вы хотите использовать механизм просмотра/шаблона:
app.set('view engine', 'ejs');
или
app.set('view engine', 'jade');
Но для рендеринга plain-html см. этот пост: Отрисовать базовый HTML-просмотр?.