Подтвердить что ты не робот

Ошибка: не удается найти модуль 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
4b9b3361

Ответ 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-просмотр?.