在Express中使用HTML代替Jade

在Express中使用HTML代替Jade,html,node.js,express,pug,Html,Node.js,Express,Pug,如何在使用带有Node.JS的Express时去除Jade?我只想使用纯html。在其他文章中,我看到人们推荐了app.register(),它在最新版本中已被弃用。如果您想在nodeJS中使用普通html,而不使用jade。。或者随便什么: var html = '<div>' + 'hello' + '</div>'; 并可随意使用\t或\n。但是我更喜欢没有,而且速度更快。app.register()没有贬值,从Express 3开始,它刚刚被重命名为

如何在使用带有Node.JS的Express时去除Jade?我只想使用纯html。在其他文章中,我看到人们推荐了app.register(),它在最新版本中已被弃用。

如果您想在nodeJS中使用普通html,而不使用jade。。或者随便什么:

var html = '<div>'
    + 'hello'
  + '</div>';
并可随意使用\t或\n。但是我更喜欢没有,而且速度更快。

app.register()
没有贬值,从Express 3开始,它刚刚被重命名为
app.engine()

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

exports.compile = function(templateString, options) {
    return a Function;
};
Express 3.x模板引擎应导出以下内容:

exports.__express = function(filename, options, callback) {
  callback(err, string);
};
如果模板引擎未公开此 方法,您不会走运,
app.engine()
方法允许您 将任何函数映射到扩展。假设你有一个降价图书馆 并希望呈现.md文件,但此库不支持 Express,您的
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);
  });
});
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 = {};
如果您正在寻找一个允许您使用“普通”HTML的模板引擎,我建议您这样做,因为它是


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

您可以将EJS与express一起使用,其中的模板是HTML,但支持变量。 这是一个关于如何在express中使用EJS的好教程


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

doctype html              
html. // THAT DOT
    <body>     
        <div>Hello, yes this is dog</div>
    </body>
doctype html
html.//那个点
喂,是的,我是狗
PS-无需关闭HTML-这由Jade自动完成。

从express 3开始,您只需使用
app.get('/',函数(req,res){
res.sendfile(uu dirname+'/index.html');
});)
发件人:

res.sendfile(路径,[options],[fn]])

按给定路径传输文件

根据以下内容自动默认内容类型响应标题字段: 文件名的扩展名。回调
fn(err)
在 传输完成或发生错误时

警告
res.sendFile
通过http缓存头提供客户端缓存,但不缓存服务器端的文件内容上述代码将在每次请求时命中磁盘

您可以这样做:

  • 安装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' });};
    
  • 然后可以在/views目录中创建html视图

  •  npm install consolidate
     npm install swig
    

    在我看来,使用像ejs这样大的东西来读取html文件有点笨手笨脚。我刚刚为html文件编写了自己的模板引擎,非常简单。该文件如下所示:

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

    考虑到你已经定义了你的路线或者知道怎么做

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

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

    因为Jade支持HTML,如果您只想使用.HTML ext,您可以这样做

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

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

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

  • 安装并安装到您的目录中

     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添加到“视图”文件夹中。重新启动节点服务器并在浏览器中启动应用程序


  • 虽然这将呈现html没有任何问题,但我建议您通过学习使用JADE。Jade是一个惊人的模板引擎,学习它将帮助您实现更好的设计和可伸缩性。

    好吧,听起来您希望为静态文件提供服务。有一页是这样写的


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

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

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

    原始答案:

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

    express -h
    
    然后您必须使用列表中的“无视图”。请选择“无视图”

    express --no-view myapp
    

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

    我希望能够在Express(vs plain Node.js)中使用html文件。哦哦哦,对不起(我是法语:p),所以您可以使用
    fs
    模块
    fs.readFile(htmlfile,'utf8',function(err,file){
    请看我的答案,你的答案完美地解释了如何注册模板引擎,但是有一种更简单的方法来传输普通html文件。@josh3736:你的“速度非常快”hyperlink在Firefox 41中工作,但在Chromium版本45.0.2454.101 Ubuntu 14.04(64位)中无法运行测试。我想知道为什么。我相信OP仍然希望使用某种模板,只是使用常规HTML语法。
    sendfile
    不允许您执行任何模板,因为它只从文件发送字节。此外,我建议不要像这样使用
    sendfile
    ,因为这意味着每次请求c时您都会点击磁盘对于高流量页面来说,你应该在内存缓存中真正做到这一点。@ JOHH3636如果你对OP意图是正确的,那么问题应该得到改善。你在每一个请求上敲击磁盘是正确的,我会改进我的答案来警告这个事实。请考虑改进你的警告,如果你IM。plement一个定制引擎你也必须实现捕获功能(如果需要的话),它不是由express处理的。Doctype 5现在不推荐使用。使用“Doctype html”作为第一行。Docs for the dot:我刚刚开始使用node.js。解决方案我不清楚。我有一个小的html网站。我需要node.js来发送电子邮件