在将Express与Node.JS一起使用时,如何摆脱Jade?我只想使用纯HTML。在其他文章中,我看到人们推荐了app.register(),该版本现已在最新版本中弃用。
在将Express与Node.JS一起使用时,如何摆脱Jade?我只想使用纯HTML。在其他文章中,我看到人们推荐了app.register(),该版本现已在最新版本中弃用。
Answers:
您可以这样进行:
安装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视图。
title
在html文件中打印变量?
Jade还接受html输入。
只需在行尾添加一个点即可开始提交纯HTML。
如果这样做对您有用,请尝试:
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PS-无需关闭HTML-Jade会自动完成。
response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
res.sendfile(path, [options], [fn]])
在给定路径下传输文件。
根据文件名的扩展名自动默认Content-Type响应头字段。
fn(err)
传输完成或发生错误时,将调用回调。
res.sendFile
通过http缓存头提供客户端缓存,但不在服务器端缓存文件内容。上面的代码将在每次请求时写入磁盘。
sendfile
不允许您做任何模板处理,因为它只是从文件发送字节。此外,我建议不要使用sendfile
这种方式,因为这意味着您每次遇到请求时都将访问磁盘,这是一个巨大的瓶颈。对于高流量页面,您应该真正进行内存缓存。
在我看来,仅使用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');
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()
方法允许您将任何函数映射到扩展。假设您有一个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视图模型将视图留给您(或模板引擎)进行缓存。在生产环境中,您可能希望将视图缓存在内存中,这样就不必对每个请求都进行磁盘I / O了。
您可以使用EJS来表示哪些模板是HTML,但支持变量。这是有关如何在Express中使用EJS的很好的教程。
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
要使渲染引擎接受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');
在“ views”文件夹中将视图模板添加为.html。重新启动节点服务器,然后在浏览器中启动该应用程序。
尽管这样可以毫无问题地呈现html,但我还是建议您通过学习使用JADE。Jade是一个了不起的模板引擎,学习它可以帮助您实现更好的设计和可伸缩性。
首先使用以下行检查模板引擎的兼容版本
express -h
那么您必须从列表中不使用任何视图。选择无视图
express --no-view myapp
现在您可以在公用文件夹中使用所有的html,css,js和图像。
好吧,听起来您想提供静态文件。那里有一个页面 http://expressjs.com/en/starter/static-files.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');
那么您只需将视图中的文件从翡翠更改为html。
如果要在nodeJS中使用纯HTML,而不使用jade ..或其他任何东西:
var html = '<div>'
+ 'hello'
+ '</div>';
性格方面,我做得很好。
优点是控制时简单。您可以使用一些技巧,例如'<p>' + (name || '') + '</p>'
三元等。
如果要在浏览器中缩进代码,则可以执行以下操作:
+ 'ok \
my friend \
sldkfjlsdkjf';
并随意使用\ t或\ n。但是我更喜欢没有,而且速度更快。