如何在使用带有Node.JS的Express时摆脱Jade?我想只使用普通的HTML。在其他文章中,我看到人们推荐app.register(),现在已在最新版本中弃用。
答案 0 :(得分:70)
你可以这样做:
安装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视图。
答案 1 :(得分:60)
Jade也接受html输入。
只需在行尾添加一个点即可开始提交纯HTML
如果这对您有用,那么请尝试:
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PS - 无需关闭HTML - 这是由Jade自动完成的。
答案 2 :(得分:16)
response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
来自the official express api reference:
res.sendfile(path, [options], [fn]])
以给定路径传输文件。
自动默认基于的Content-Type响应标头字段 文件名的扩展名。当回调时调用回调
fn(err)
传输完成或发生错误时。
res.sendFile
通过http缓存头提供客户端缓存,但它不会在服务器端缓存文件内容。 上面的代码会在每次请求时点击磁盘。
答案 3 :(得分:16)
在我看来,使用像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');
答案 4 :(得分:10)
app.register()
尚未弃用,自Express 3 changes the way template engines are handled以来刚刚重命名为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文件,但是这个库不支持 快递,您的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,因为它是extremely fast。
当然,请记住,Express 3视图模型会将视图缓存留给您(或模板引擎)。在生产环境中,您可能希望将视图缓存在内存中,这样就不会在每次请求时都执行磁盘I / O.
答案 5 :(得分:4)
您可以使用EJS表示哪些模板是HTML但支持变量。 这是一个关于如何在快递中使用EJS的好教程。
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
答案 6 :(得分:4)
要使渲染引擎接受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');
在“views”文件夹中将视图模板添加为.html。重启节点服务器并在浏览器中启动应用程序。
虽然这会呈现html没有任何问题,但我建议你通过学习来使用JADE。 Jade是一个令人惊叹的模板引擎,学习这将有助于您实现更好的设计和可扩展性。
答案 7 :(得分:3)
嗯,听起来你想要提供静态文件。还有一个页面 http://expressjs.com/en/starter/static-files.html
奇怪的是,没有人链接到文档。
答案 8 :(得分:2)
首先使用下面的行检查模板引擎的兼容性版本
express -h
然后您就不必在列表中使用任何视图。选择无视图
express --no-view myapp
现在您可以在公用文件夹中使用所有的html,css,js和图像。
答案 9 :(得分:1)
因为Jade支持HTML,如果你只想拥有.html ext,你可以这样做
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
然后你只需将视图中的文件从jade更改为html。
答案 10 :(得分:1)
答案 11 :(得分:0)
考虑到您已经定义了路线或者知道如何进行路线。
app.get('*', function(req, res){
res.sendfile('path/to/your/html/file.html');
});
注意:此路线必须放在所有其他路线之后,因为*接受所有内容。
答案 12 :(得分:-9)
如果你想在nodeJS中使用普通html ,而不使用jade ..或其他:
var html = '<div>'
+ 'hello'
+ '</div>';
Personnaly我做得很好。
控制时的优点是简单。
你可以使用一些技巧,比如'<p>' + (name || '') + '</p>'
,三元等等。
如果您想在浏览器中使用缩进代码,则可以执行以下操作:
+ 'ok \
my friend \
sldkfjlsdkjf';
并随意使用\ t或\ n。但我更喜欢没有,加上它更快。