//app.set('view engine', 'jade');
app.set('view engine', 'html');
而这个文件保持不变:
exports.index = function(req, res){
res.render('index');
};
但是在运行时我遇到了
500错误: 找不到模块“html”
那么我的唯一选择是使用“ejs”吗?我的意图是将纯HTML与AngularJS结合使用。
//app.set('view engine', 'jade');
app.set('view engine', 'html');
而这个文件保持不变:
exports.index = function(req, res){
res.render('index');
};
但是在运行时我遇到了
500错误: 找不到模块“html”
那么我的唯一选择是使用“ejs”吗?我的意图是将纯HTML与AngularJS结合使用。
在另一个链接中的答案可以起作用,但是如果要提供HTML,根本不需要使用视图引擎,除非您想设置新奇的路由。相反,只需使用静态中间件即可:
app.use(express.static(__dirname + '/public'));
res.render()
不再起作用。相反,把你的原始 HTML 文件放在 public
目录下,让静态中间件直接处理文件的提供服务。如果您需要更复杂的路由,可以自己设置 HTML 视图引擎。 - Nick McCurdyres.sendFile
来提供HTML文件,例如 app.get('/', (req, res) => res.sendFile("index.html"));
。 - rovyko为了让渲染引擎接受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');
将您的视图模板作为“.html”文件添加到“views”文件夹中。重新启动您的节点服务器并在浏览器中启动应用程序。
虽然这样呈现HTML没有任何问题,但我建议您通过学习使用JADE。Jade是一个很棒的模板引擎,学习它将有助于您实现更好的设计和可扩展性。
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
npm install ejs --save
npm install path --save
然后导入所需的包:
var path = require('path');
这样您就可以将您的视图保存为 .html 而不是 .ejs。
在使用支持 html 但不识别 ejs 的 IDE 时非常有用。
如果您想在简单的纯HTML文件中使用Angular,则不需要视图引擎。以下是如何操作:
在您的route.js
文件中:
router.get('/', (req, res) => {
res.sendFile('index.html', {
root: 'yourPathToIndexDirectory'
});
});
尝试将此配置用于您的服务器
app.configure(function() {
app.use(express.static(__dirname + '/public')); // set the static files location
app.use(express.logger('dev')); // log every request to the console
app.use(express.bodyParser()); // pull information from html in POST
app.use(express.methodOverride()); // simulate DELETE and PUT
app.use(express.favicon(__dirname + '/public/img/favicon.ico'));
});
那么你的路由回调函数将如下所示:
function(req, res) {
res.sendfile('./public/index.html');
};
我建议使用 https://www.npmjs.com/package/express-es6-template-engine——这是一个非常轻量级且极快的模板引擎。虽然名称有点误导,但它也可以在没有 expressjs 的情况下使用。
将 express-es6-template-engine
集成到您的应用程序中所需的基本知识非常简单,易于实现:
const express = require('express'),
es6Renderer = require('express-es6-template-engine'),
app = express();
app.engine('html', es6Renderer);
app.set('views', 'views');
app.set('view engine', 'html');
app.get('/', function(req, res) {
res.render('index', {locals: {title: 'Welcome!'}});
});
app.listen(3000);
index.html
file locate inside your 'views' directory:
<!DOCTYPE html>
<html>
<body>
<h1>${title}</h1>
</body>
</html>
<div>${customer.name}</div>
!我希望我能找到如何提取{locals: { rows: [ ]}
以映射一组元素的方法。有什么线索吗? - Neil Gaetano Lindberg将HTML中间件注释掉,即:
//app.set('view engine', 'html');
请使用:
app.get("/",(req,res)=>{
res.sendFile("index.html");
});
app.set('views', path.join(__dirname, 'views'));
**// Set EJS View Engine**
app.set('view engine','ejs');
**// Set HTML engine**
app.engine('html', require('ejs').renderFile);
.html文件将起作用
Html文件无需渲染。
渲染引擎所做的是将非Html文件转换为Html文件。
要发送一个Html文件,只需执行以下操作:
res.sendFile("index.html");
您可能需要使用__dirname + "/index.html"
,这样Express就会知道确切的路径。
可以使用ejs引擎来渲染HTML文件:
app.set('view engine', 'ejs');
请确保您的文件位于“/views”目录下,并以“.ejs”命名。
例如,“index.ejs”。