node.js - 在Express而不是Jad中使用HTML

如何在使用带有Node.JS的Express时摆脱Jade? 我想只使用普通的HTML。 在其他文章中我看到人们推荐的app.register()现在已在最新版本中弃用。

Sanchit Gupta asked 2019-08-12T16:31:16Z
13个解决方案
70 votes

你可以这样做:

  1. 安装ejs:

    // ./routes/index.js
    exports.index = function(req, res){
    res.render('index', { title: 'ejs' });};
    
  2. 将app.js中的模板引擎设置为ejs

    // ./routes/index.js
    exports.index = function(req, res){
    res.render('index', { title: 'ejs' });};
    
  3. 现在在路径文件中,您可以分配模板变量

    // ./routes/index.js
    exports.index = function(req, res){
    res.render('index', { title: 'ejs' });};
    
  4. 然后,您可以在/ views目录中创建html视图。

Biwek answered 2019-08-12T16:32:05Z
59 votes

Jade也接受html输入。
只需在行尾添加一个点即可开始提交纯HTML。
如果这样做对你有用,那么试试:

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

PS - 无需关闭HTML - 这是由Jade自动完成的。

Martin Sookael answered 2019-08-12T16:32:53Z
16 votes

从快递3开始,您只需使用res.sendFile即可

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

从官方快递api参考:

res.sendFile

在给定路径传输文件。

基于自动默认Content-Type响应头字段   文件名的扩展名。 当回调时调用回调res.sendFile   传输完成或发生错误。

警告

res.sendFile通过http缓存头提供客户端缓存,但它不会在服务器端缓存文件内容。 上面的代码将在每个请求上点击磁盘。

laconbass answered 2019-08-12T16:33:58Z
16 votes

在我看来,使用像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');
kevin.groat answered 2019-08-12T16:34:31Z
10 votes

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); }); }); 尚未折旧,它刚刚重命名为app.engine(),因为Express 3更改了模板引擎的处理方式。

Express 2.x模板引擎兼容性需要以下模块   出口:

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);
  });
});

Express 3.x模板引擎应导出以下内容:

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);
  });
});

如果模板引擎没有暴露这个   方法,你没有运气,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); }); }); 方法允许你   将任何函数映射到扩展名。 假设你有一个降价库   并且想要渲染.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);
  });
});

如果你正在寻找一个模板引擎,让你可以使用&#39; plain&#39; HTML,我推荐doT因为它非常快。

当然,请记住,Express 3视图模型会将视图缓存留给您(或您的模板引擎)。 在生产环境中,您可能希望将视图缓存在内存中,这样您就不会在每个请求上执行磁盘I / O.

josh3736 answered 2019-08-12T16:35:48Z
4 votes

您可以使用EJS表示哪些模板是HTML但支持变量。这是一个如何在快递中使用EJS的好教程。

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

Pablo Vallejo answered 2019-08-12T16:36:22Z
4 votes

要使渲染引擎接受html而不是jade,您可以按照以下步骤操作;

  1. 安装合并和swig到您的目录。

    var cons = require('consolidate');
    
    // view engine setup
    app.engine('html', cons.swig)
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', ‘html');
    
  2. 将以下行添加到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');
    
  3. 将视图模板添加为“views”文件夹中的.html。 重新启动节点服务器并在浏览器中启动应用程序。

虽然这会渲染html没有任何问题,但我建议你通过学习它来使用JADE。 Jade是一个令人惊叹的模板引擎,学习这将有助于您实现更好的设计和可扩展性。

AnandShanbhag answered 2019-08-12T16:37:02Z
3 votes

好吧,听起来你想要提供静态文件。 还有一个页面[http://expressjs.com/en/starter/static-files.html]

奇怪的是,没有人链接到文档。

S Meaden answered 2019-08-12T16:37:35Z
2 votes

首先使用下面的行检查模板引擎的兼容性版本

express -h

那么你必须从列表中不使用任何视图。选择没有视图

express --no-view myapp

现在你可以在公共文件夹中使用你的所有html,css,js和图像。

Soubhagya Kumar answered 2019-08-12T16:38:14Z
1 votes

由于Jade支持HTML,如果你只想拥有.html ext,你可以这样做

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

然后你只需将视图中的文件从jade更改为html。

Weijing Jay Lin answered 2019-08-12T16:38:47Z
1 votes

您也可以直接将您的html文件包含到您的jade文件中

include ../../public/index.html

原始答案:没有玉的Express Generator

Priyanshu Chauhan answered 2019-08-12T16:39:21Z
0 votes

考虑到您已经定义了路线或者知道如何进行路线。

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

注意:此路由必须放在所有其他路由之后,因为*接受所有内容。

João Rodrigues answered 2019-08-12T16:39:57Z
-9 votes

如果你想在nodeJS中使用普通的html,而不使用jade ..或者其他:

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

就我而言,我个人做得很好。

控制时的优点是简单。你可以使用一些技巧,如'<p>' + (name || '') + '</p>',三元等

如果您想在浏览器中使用缩进代码,则可以执行以下操作:

+ 'ok \
  my friend \
  sldkfjlsdkjf';

并随意使用\ t或\ n。 但我更喜欢没有,加上它更快。

answered 2019-08-12T16:40:58Z
translate from https://stackoverflow.com:/questions/11495595/using-html-in-express-instead-of-jade