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

Использование HTML в Express вместо Jade

Как избавиться от Jade при использовании Express с помощью Node.JS? Я хочу просто использовать простой html. В других статьях я видел, что люди рекомендовали app.register(), которые теперь устарели в последней версии.

4b9b3361

Ответ 1

Вы можете сделать это следующим образом:

  • Установите ejs:

    npm install ejs
    
  • Установите механизм шаблона в app.js как ejs

    // app.js
    app.engine('html', require('ejs').renderFile);
    app.set('view engine', 'html');
    
  • Теперь в файле маршрута вы можете назначить переменные шаблона

    // ./routes/index.js
    exports.index = function(req, res){
    res.render('index', { title: 'ejs' });};
    
  • Затем вы можете создать свой html-представление в каталоге /views.

Ответ 2

Jade также принимает вход html.

Просто добавьте точку в конец строки, чтобы начать отправку чистого html.
Если это трюк для вас, попробуйте:

doctype html              
html. // THAT DOT
    <body>     
        <div>Hello, yes this is dog</div>
    </body>

PS - Не нужно закрывать HTML - это сделано автоматически с помощью Jade.

Ответ 3

Как и в случае с выражением 3, вы можете просто использовать response.sendFile

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

Из официальной экспресс-ссылки api:

res.sendfile(path, [options], [fn]])

Перенесите файл по заданному пути.

Автоматически по умолчанию используется поле заголовка ответа Content-Type на основе расширение имени файла. Обратный вызов fn(err) вызывается, когда передача завершена или когда возникает ошибка.

Внимание!

res.sendFile обеспечивает кеширование на стороне клиента через заголовки кэша HTTP, но не кэширует содержимое файла на стороне сервера. Приведенный выше код попадет на диск по каждому запросу.

Ответ 4

app.register() не был обесценен, он только что был переименован в app.engine(), так как Express 3 изменяет способ обработки движков шаблонов.

Для совместимости движка Express 2.x требуется следующий модуль экспорт:

exports.compile = function(templateString, options) {
    return a Function;
};

Двигатели Express Express 3.x должны экспортировать следующее:

exports.__express = function(filename, options, callback) {
  callback(err, string);
};

Если механизм шаблона не раскрывает этот метод, вам не повезло, метод app.engine() позволяет вам сопоставить любую функцию с расширением. Предположим, у вас есть библиотека уценки и захотелось отобразить файлы .md, но эта библиотека не поддерживала Экспресс, ваш вызов app.engine() может выглядеть примерно так:

var markdown = require('some-markdown-library');
var fs = require('fs');

app.engine('md', function(path, options, fn){
  fs.readFile(path, 'utf8', function(err, str){
    if (err) return fn(err);
    str = markdown.parse(str).toString();
    fn(null, str);
  });
});

Если вы ищете механизм шаблонов, который позволяет использовать "простой" HTML, я рекомендую doT, потому что это очень быстро.

Конечно, имейте в виду, что модель просмотра Express 3 оставляет представление о кешировании до вас (или в вашем шаблоне). В производственной среде вы, вероятно, захотите кэшировать свои представления в памяти, чтобы вы не выполняли операции ввода/вывода по каждому запросу.

Ответ 5

По-моему, использование чего-то такого же размера, как ejs, просто для чтения html файлов, немного тяжело. Я просто написал свой собственный механизм шаблонов для html файлов, который замечательно прост. Файл выглядит следующим образом:

var fs = require('fs');
module.exports = function(path, options, fn){
    var cacheLocation = path + ':html';
    if(typeof module.exports.cache[cacheLocation] === "string"){
        return fn(null, module.exports.cache[cacheLocation]);
    }
    fs.readFile(path, 'utf8', function(err, data){
        if(err) { return fn(err); }
        return fn(null, module.exports.cache[cacheLocation] = data);
    });
}
module.exports.cache = {};

Я назвал мой htmlEngine, и способ, которым вы его используете, - просто сказать:

app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');

Ответ 6

Вы можете использовать EJS с выражением, какие шаблоны являются HTML, но поддерживают переменные. Вот хороший учебник по использованию EJS в экспресс.

http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/

Ответ 7

Чтобы заставить движок рендеринга принимать html вместо jade, вы можете выполнить следующие шаги:

  • Установите consolidate и swig в ваш каталог.

     npm install consolidate
     npm install swig
    
  • добавить следующие строки в файл app.js

    var cons = require('consolidate');
    
    // view engine setup
    app.engine('html', cons.swig)
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', ‘html');
    
  • добавьте свои шаблоны просмотров как .html внутри папки "views". Перезагрузите сервер node и запустите приложение в браузере.

Хотя это сделает html без каких-либо проблем, я бы рекомендовал вам использовать JADE, изучив его. Джейд - удивительный механизм шаблонов, и изучение этого поможет вам достичь лучшего дизайна и масштабируемости.

Ответ 8

Ну, похоже, вы хотите обслуживать статические файлы. И есть страница для этого http://expressjs.com/en/starter/static-files.html

Необычно, что никто не ссылается на документацию.

Ответ 9

поскольку Jade поддерживает HTML, если вы просто хотите иметь .html ext, вы можете сделать это

// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');

то вы просто меняете файл в виде от jade до html.

Ответ 10

Учитывая, что ваши маршруты уже определены или не знают, как это сделать.

app.get('*', function(req, res){
    res.sendfile('path/to/your/html/file.html');
});

ПРИМЕЧАНИЕ: этот маршрут должен быть размещен после всех остальных, поскольку * принимает все.

Ответ 12

Если вы хотите использовать обычный html в nodeJS, не используя jade.. или что-то еще:

var html = '<div>'
    + 'hello'
  + '</div>';

Personnaly, я все в порядке с этим.

Преимущество - простота при управлении. Вы можете использовать некоторые трюки, например '<p>' + (name || '') + '</p>', тернарные и т.д.

Если вам нужен код с отступом в браузере, вы можете сделать:

+ 'ok \
  my friend \
  sldkfjlsdkjf';

и используйте \t или\n по желанию. Но я предпочитаю без, плюс это быстрее.