为什么明确告诉我,我的默认视图引擎没有定义?

我正在使用nodejs和mongodb在后端为我正在工作的应用程序。 我正在使用快递testing应用程序,我试图使用ejs呈现我的HTML文件。 但是,我有我的默认视图引擎没有被定义的问题。

这是我的app.js:

/** * Module dependencies. */ var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path'); var conf = require('./conf'); var app = express(); var mongoose = require('mongoose'); , Schema = mongoose.Schema , ObjectId = mongooseSchemaTypes.ObjectID; var UserSchema = new Schema({}) , User; // all environments app.set('port', process.env.PORT || 3000); app.set('view engine', 'ejs'); app.engine('.html', require('ejs').renderFile()); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', routes.index); app.get('/users', user.list); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

这是我的package.json:

 { "name": "application-name", "version": "0.0.1", "private": true, "dependencies": { "express": "3.3.3", "ejs":">= 0.0.1", "mongoose-auth": ">= 0.0.12", "mongoose": ">=2.4.8", "everyauth": ">=0.2.28" } } 

错误:

Express 500错误:无法查找视图“索引”

 at Function.app.render (/home/christian/node_modules/nave/create/node_modules/express/lib/application.js:494:17) at ServerResponse.res.render (/home/christian/node_modules/nave/create/node_modules/express/lib/response.js:756:7) at exports.index (/home/christian/node_modules/nave/create/routes/index.js:7:7) at callbacks (/home/christian/node_modules/nave/create/node_modules/express/lib/router/index.js:161:37) at param (/home/christian/node_modules/nave/create/node_modules/express/lib/router/index.js:135:11) at pass (/home/christian/node_modules/nave/create/node_modules/express/lib/router/index.js:142:5) at Router._dispatch (/home/christian/node_modules/nave/create/node_modules/express/lib/router/index.js:170:5) at Object.router (/home/christian/node_modules/nave/create/node_modules/express/lib/router/index.js:33:10) at next (/home/christian/node_modules/nave/create/node_modules/express/node_modules/connect/lib/proto.js:190:15) at Object.methodOverride [as handle] (/home/christian/node_modules/nave/create/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:49:5) 

现在当我尝试运行它时,我的terminal输出:

 /home/christian/node_modules/nave/create/node_modules/express/lib/application.js:173 if ('function' != typeof fn) throw new Error('callback function required'); ^ Error: callback function required at Function.app.engine (/home/christian/node_modules/nave/create/node_modules/express/lib/application.js:173:38) at Function.<anonymous> (/home/christian/node_modules/nave/create/app.js:26:9) at Function.app.configure (/home/christian/node_modules/nave/create/node_modules/express/lib/application.js:392:61) at Object.<anonymous> (/home/christian/node_modules/nave/create/app.js:23:5) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) 

任何帮助将不胜感激。

错误的来源描述了要求:

 if (!ext && !this.defaultEngine) throw new Error('No default engine was specified and no extension was provided.'); 

Express期望您可以使用扩展名指定视图:

 res.render('index.html'); 

或者指定一个默认的视图引擎,然后命名你的视图:

 app.set('view engine', 'ejs'); // `res.render('index')` renders `index.ejs` 

关于你的编辑:

 if ('function' != typeof fn) throw new Error('callback function required'); 

问题在于这一行:

 app.engine('.html', require('ejs').renderFile()); 

正如文档演示 , app.engine()期待function引用。 你可以通过简单的删除()调用 renderFile来做到这renderFile

 app.engine('.html', require('ejs').renderFile); 

需要在app.configure完成所有的app.setapp.use

尝试这个

 app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('view engine', 'ejs'); app.engine('.html', require('ejs').renderFile()); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } });