在Express中使用HTML代替Jade
如何在使用带有Node.JS的Express时去除Jade?我只想使用纯html。在其他文章中,我看到人们推荐了app.register(),它在最新版本中已被弃用。如果您想在nodeJS中使用普通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开始,它刚刚被重命名为
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缓存头提供客户端缓存,但不缓存服务器端的文件内容上述代码将在每次请求时命中磁盘您可以这样做:
npm install 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' });};
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
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没有任何问题,但我建议您通过学习使用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来发送电子邮件