我有一个基本的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')
我错过了什么?
表达4.倍
res.sendFile(path [, options] [, fn])
发送.html文件,没有模板引擎…
//...
// Node modules
const path = require('path')
//...
// Set path to views directory
app.set('views', path.join(__dirname, 'views'))
/**
* App routes
*/
app.get('/', (req, res) => {
res.sendFile('index.html', { root: app.get('views') })
})
//...
.
├── node_modules
│
├── views
│ ├──index.html
└── app.js
来自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
我在特快3中也遇到了同样的问题。X和节点0.6.16。以上给出的解决方案不适用于最新版本的express 3.x。他们删除了app.register方法,并添加了app.engine方法。如果您尝试上述解决方案,可能会出现以下错误。
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
at Function.<anonymous> (/home/user1/ArunKumar/firstExpress/app.js:37:5)
at Function.configure (/home/user1/ArunKumar/firstExpress/node_modules/express/lib/application.js:399:61)
at Object.<anonymous> (/home/user1/ArunKumar/firstExpress/app.js:22:5)
at Module._compile (module.js:441:26)
at Object..js (module.js:459:10)
at Module.load (module.js:348:31)
at Function._load (module.js:308:12)
at Array.0 (module.js:479:10)
at EventEmitter._tickCallback (node.js:192:40)
来消除错误消息。在app.configure函数中添加以下代码行
app.engine('html', require('ejs').renderFile);
注意:你必须安装ejs模板引擎
npm install -g ejs
例子:
app.configure(function(){
.....
// disable layout
app.set("view options", {layout: false});
app.engine('html', require('ejs').renderFile);
....
app.get('/', function(req, res){
res.render("index.html");
});
注意:最简单的解决方案是使用ejs模板作为视图引擎。你可以在*中编写原始HTML。Ejs视图文件。
如果你使用express framework到node.js
安装 npm EJS
然后添加配置文件
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router)
;
从exports模块form.js中呈现页面
HTML文件在视图目录
扩展ejs文件名称为
form.html.ejs
然后创建form.js
res.render(“form.html.ejs”);