在Express中使用HTML代替Jade

如何使用Express与Node.JS摆脱翡翠? 我只想使用纯html。 在其他文章中,我看到人们推荐app.register(),现在在最新版本中已经弃用了。

你可以这样做:

  1. 安装ejs:

    npm install ejs 
  2. 将app.js中的模板引擎设置为ejs

     // app.js app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); 
  3. 现在在你的路由文件中,你可以分配模板variables

     // ./routes/index.js exports.index = function(req, res){ res.render('index', { title: 'ejs' });}; 
  4. 然后你可以在/ views目录下创build你的HTML视图。

Jade也接受htmlinput。
只需在行尾添加一个点即可开始提交纯HTML。
如果这样做你的技巧然后尝试:

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

PS – 无需closuresHTML – 这是由Jade自动完成的。

从表3可以简单地使用response.sendFile

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

从官方的express api参考 :

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

在给定的path上传输文件。

基于文件名的扩展名自动默认Content-Type响应头字段。 当传输完成或发生错误时,调用fn(err)

警告

res.sendFile通过httpcaching头提供客户端caching,但不caching服务器端的文件内容。 上面的代码将在每个请求中打到磁盘

app.register()没有被折旧,它只是重命名为app.engine()因为Express 3 改变了模板引擎的处理方式 。

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()幸运, app.engine()方法允许你将任何函数映射到一个扩展。 假设你有一个markdown库,并且想渲染.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); }); }); 

如果你正在寻找一个模板引擎,可以让你使用'普通'的HTML,我推荐doT,因为它速度非常快 。

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

在我看来,使用像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'); 

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

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

为了使渲染引擎接受HTML而不是玉,你可以按照以下步骤;

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

      npm install consolidate npm install swig 
  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没有任何问题,但我build议你通过学习使用JADE。 翡翠是一个了不起的模板引擎,学习这将帮助你实现更好的devise和可扩展性。

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

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

既然Jade支持HTML,如果你只想要.html分机,你可以这样做

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

那么你只需要将视图中的文件从jade更改为html。

考虑到你有你的路线已经定义或知道如何做到这一点。

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

注意:这条路线必须放在所有其他路线之后,因为*接受了所有的路线。

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

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

原始的答案: 没有玉的高速发电机

如果你想在nodeJS中使用纯html ,而不使用jade ..或其他:

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

Personnaly我做得很好。

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

如果你想在浏览器中使用缩进的代码,你可以这样做:

 + 'ok \ my friend \ sldkfjlsdkjf'; 

并根据需要使用\ t或\ n。 但我更喜欢没有,加上它更快。