我有一个基本的Node.js应用程序,我试图使用Express框架启动。我有一个views文件夹,其中有一个index.html文件。但是我在加载网页时收到以下错误:
Error: Cannot find module 'html'
下面是我的代码。
var express = require('express');
var app = express.createServer();
app.use(express.staticProvider(__dirname + '/public'));
app.get('/', function(req, res) {
res.render('index.html');
});
app.listen(8080, '127.0.0.1')
我错过了什么?
这些答案很多都已经过时了。
使用快捷3.0.0和3.1.0,以下工作:
app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);
请参阅下面的注释,了解表达式3.4+的替代语法和注意事项:
app.set('view engine', 'ejs');
然后你可以这样做:
app.get('/about', function (req, res)
{
res.render('about.html');
});
这里假设views子文件夹中有视图,并且已经安装了ejs节点模块。如果不是,在Node控制台中执行以下命令:
npm install ejs --save
如果你使用express@~3.0.0修改下面的代码行:
app.use(express.staticProvider(__dirname + '/public'));
就像这样:
app.set("view options", {layout: false});
app.use(express.static(__dirname + '/public'));
我做了它的描述在express api页面,它的工作就像魅力。有了这样的设置,你就不需要编写额外的代码,所以它很容易用于你的微产品或测试。
完整代码如下所示:
var express = require('express');
var app = express.createServer();
app.set("view options", {layout: false});
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res) {
res.render('index.html');
});
app.listen(8080, '127.0.0.1')
来自Express.js指南:视图渲染
视图文件名采用Express形式。ENGINE,其中ENGINE是所需模块的名称。例如视图布局。Ejs会告诉视图系统require(' Ejs '),被加载的模块必须导出方法exports。render(str, options)来遵守Express,但是app.register()可以用来将引擎映射到文件扩展名,因此,例如foo.html可以由jade渲染。
所以你要么创建自己的简单渲染器,要么使用jade:
app.register('.html', require('jade'));
更多关于app.register的信息。
注意,在Express 3中,这个方法被重命名为app.engine