如何在使用 Node.JS 的 Express 时摆脱 Jade?我想只使用纯html。在其他文章中,我看到人们推荐使用已被弃用的 app.register()。
你可以这样做:
安装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视图。
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
,因为这意味着每次请求到来时都会访问磁盘--这是一个巨大的瓶颈。对于高流量页面,您应该真正做到内存缓存。 - josh3736我认为,使用像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 = {};
我把我的叫做html引擎,你使用它的方式就是简单地说:
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
没有被弃用,只是在 Express 3 中被重命名为 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()
调用可能类似于这样:如果你正在寻找一种模板引擎,它允许你使用'普通'的HTML,则建议使用doT,因为它非常快速。当然,要记住Express 3视图模型将视图缓存留给你(或你的模板引擎)。在生产环境中,你可能希望将视图缓存在内存中,这样你就不必在每个请求上执行磁盘I/O操作。
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); }); });
Install consolidate and swig to your directory.
npm install consolidate
npm install swig
add following lines to your app.js file
var cons = require('consolidate');
// view engine setup
app.engine('html', cons.swig)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', ‘html');
add your view templates as .html inside “views” folder. Restart you node server and start the app in the browser.
虽然这样可以无障碍地呈现HTML,但我建议您学习使用JADE。Jade是一个非常棒的模板引擎,学会它将有助于您实现更好的设计和可扩展性。
首先,使用以下代码检查模板引擎的兼容版本:
express -h
express --no-view myapp
看起来你想提供静态文件服务。这里有一个相关页面:http://expressjs.com/en/starter/static-files.html
很奇怪没有人链接到文档。
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
那么您只需要将视图文件从jade更改为html即可。