为什么要表达我的默认视图引擎没有定义? [英] Why is express telling me that my default view engine is not defined?

查看:161
本文介绍了为什么要表达我的默认视图引擎没有定义?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在后端使用nodejs和mongodb为我正在开发的应用程序。我正在使用express来测试应用程序,我正在尝试使用ejs来渲染我的html文件。但是,我的默认视图引擎没有定义的问题。

I'm using nodejs and mongodb in the back end for an app I'm working on. I'm using express to test the app, and I'm trying to use ejs to render my html files. However, I'm having the issue of my default view engine not being defined.

这是我的app.js:

Here is my 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:

Here is my 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错误:无法查找视图index

Express 500 Error: Failed to lookup view "index"

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)

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

Now when I try to run it my terminal outputs:

/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希望您使用其扩展名指定视图:

Express expects that you either specify the view with its extension:

res.render('index.html');

或指定一个默认视图引擎,并在其后面命名您的视图:

Or specify a default view engine and name your views after it:

app.set('view engine', 'ejs');

// `res.render('index')` renders `index.ejs`






关于您的编辑:


Regarding your edit:


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


问题在于这一行:

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

如文档所示 app.engine()正在期待一个函数引用。您可以通过简单地删除调用 renderFile >

As the documentation demonstrates, app.engine() is expecting a function reference. You can do this by simply removing the () that call renderFile:

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

这篇关于为什么要表达我的默认视图引擎没有定义?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆