Визуализировать базовый вид HTML? - PullRequest
266 голосов
/ 25 декабря 2010

У меня есть базовое приложение node.js, которое я пытаюсь использовать с помощью Express Framework.У меня есть папка views, где у меня есть файл index.html.Но я получаю следующую ошибку при загрузке веб-браузера.

Ошибка: не удается найти модуль 'html'

Ниже приведен мой код.

var express = require('express');
var app = express.createServer();

app.use(express.staticProvider(__dirname + '/public'));

app.get('/', function(req, res) {
    res.render('index.html');
});

app.listen(8080, '127.0.0.1')

Что мне здесь не хватает?

Ответы [ 27 ]

289 голосов
/ 19 января 2012

Вы можете включить в Jade обычную HTML-страницу:

в views / index.jade

include plain.html

в views / plain.html

<!DOCTYPE html>
...

иapp.js все еще может просто визуализировать Jade:

res.render(index)
217 голосов
/ 17 августа 2012

Многие из этих ответов устарели.

Используя экспресс 3.0.0 и 3.1.0, следующие работы:

app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);

См. Комментарииниже для альтернативного синтаксиса и предостережений для экспресса 3.4 +:

app.set('view engine', 'ejs');

Затем вы можете сделать что-то вроде:

app.get('/about', function (req, res)
{
    res.render('about.html');
});

Это предполагает, что у вас есть ваши представления в подпапке viewsчто вы установили модуль узла ejs.Если нет, запустите на консоли узла следующее:

npm install ejs --save
71 голосов
/ 25 декабря 2010

Из руководства по Express.js: Просмотр рендеринга

Просмотр имен файлов в виде Express.ENGINE, где ENGINE - имя модуля, который потребуется, Например, представление layout.ejs сообщит системе представления require('ejs'), загружаемый модуль должен экспортировать метод exports.render(str, options) для соответствия Express, однако app.register() можетиспользоваться для сопоставления движков с расширениями файлов, чтобы, например, foo.html можно было визуализировать с помощью jade.

Так что вы либо создаете свой собственный простой рендер, либо просто используете jade:

 app.register('.html', require('jade'));

Подробнее о app.register.

Обратите внимание, что в Express 3 этот метод переименован в app.engine

45 голосов
/ 05 августа 2011

попробуйте это. это работает для меня.

app.configure(function(){

  .....

  // disable layout
  app.set("view options", {layout: false});

  // make a custom html template
  app.register('.html', {
    compile: function(str, options){
      return function(locals){
        return str;
      };
    }
  });
});

....

app.get('/', function(req, res){
  res.render("index.html");
});
44 голосов
/ 22 июня 2011

Вы также можете прочитать файл HTML и отправить его:

app.get('/', (req, res) => {
    fs.readFile(__dirname + '/public/index.html', 'utf8', (err, text) => {
        res.send(text);
    });
});
19 голосов
/ 30 ноября 2011
app.get('/', function (req, res) {
res.sendfile(__dirname + '/public/index.html');
});
17 голосов
/ 20 ноября 2012

Если вы используете express@~3.0.0, измените строку ниже с вашего примера:

app.use(express.staticProvider(__dirname + '/public'));

на что-то вроде этого:

app.set("view options", {layout: false});
app.use(express.static(__dirname + '/public'));

Я сделал это, как описано на странице экспресс-API , и это работает как шарм.При такой настройке вам не нужно писать дополнительный код, поэтому его становится достаточно просто использовать для микропроизводства или тестирования.

Полный код указан ниже:

var express = require('express');
var app = express.createServer();

app.set("view options", {layout: false});
app.use(express.static(__dirname + '/public'));

app.get('/', function(req, res) {
    res.render('index.html');
});

app.listen(8080, '127.0.0.1')
14 голосов
/ 29 июня 2012

Я также сталкивался с той же проблемой в express 3.X и node 0.6.16.Приведенное выше решение не будет работать для последней версии express 3.x.Они удалили метод app.register и добавили метод app.engine.Если вы попробовали описанное выше решение, вы можете получить следующую ошибку:

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
    at Function.<anonymous> (/home/user1/ArunKumar/firstExpress/app.js:37:5)
    at Function.configure (/home/user1/ArunKumar/firstExpress/node_modules/express/lib/application.js:399:61)
    at Object.<anonymous> (/home/user1/ArunKumar/firstExpress/app.js:22:5)
    at Module._compile (module.js:441:26)
    at Object..js (module.js:459:10)
    at Module.load (module.js:348:31)
    at Function._load (module.js:308:12)
    at Array.0 (module.js:479:10)
    at EventEmitter._tickCallback (node.js:192:40)

Чтобы избавиться от сообщения об ошибке.Добавьте следующую строку в ваш app.configure function

app.engine('html', require('ejs').renderFile);

Примечание. Необходимо установить ejs шаблонный движок

npm install -g ejs

Пример:

app.configure(function(){

  .....

  // disable layout
  app.set("view options", {layout: false});

  app.engine('html', require('ejs').renderFile);

....

app.get('/', function(req, res){
  res.render("index.html");
});

Примечание: Самое простое решение - использовать шаблон ejs в качестве движка представления.Там вы можете написать необработанный HTML в * .ejs файлах просмотра.

7 голосов
/ 17 апреля 2017

структура папки:

.
├── index.html
├── node_modules
│   ├──{...}
└── server.js

server.js

var express = require('express');
var app = express();

app.use(express.static('./'));

app.get('/', function(req, res) {
    res.render('index.html');
});

app.listen(8882, '127.0.0.1')

index.html

<!DOCTYPE html>
<html>
<body>

<div> hello world </div>

</body>
</html>

вывод:

Привет, мир

7 голосов
/ 04 октября 2012

Если вам не нужно использовать каталог views , просто переместите html-файлы в каталог public ниже.

и затем добавьте эту строку в app.configure вместо '/views'.

server.use(express.static(__dirname + '/public'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...