Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法在带有快速手柄的目录中查找视图_Node.js_Express_Handlebars.js - Fatal编程技术网

Node.js 无法在带有快速手柄的目录中查找视图

Node.js 无法在带有快速手柄的目录中查找视图,node.js,express,handlebars.js,Node.js,Express,Handlebars.js,我正在遵循从Express Generator获得的基本应用程序布局,并尝试将其配置为把手 片段: var exphbs = require('express-handlebars'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views/')); app.engine('handlebars', exphbs({defaultLayout: 'main'})); ap

我正在遵循从Express Generator获得的基本应用程序布局,并尝试将其配置为把手

片段:

var exphbs = require('express-handlebars');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views/'));

app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
一切正常,直到我尝试将把手的延长部分更改为
.hbs
,如下所示:

app.engine('handlebars', exphbs({defaultLayout: 'main', extname: '.hbs'}));
(当然还有重命名文件)

这导致:

错误:无法在视图目录中查找视图“错误”

我查看了express-handlebar.js源代码中的
函数expresshandlebar(config)
,它确实尝试适当地设置extname app


我做错了什么?

有些反直觉,设置扩展名是不够的

所需的设置是:

app.engine('hbs', exphbs({defaultLayout: 'main', extname: '.hbs'}));
app.set('view engine', 'hbs');

在视图目录中创建error.hbs文件解决了我的问题

 var exphbs = require('express-handlebars');

    // view engine setup
app.engine('hbs', exphbs({ defaultLayout: 'main', extname: '.hbs' }));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

对于最初没有看到它的任何其他人:引擎名称必须与文件扩展名相同。有人知道为什么吗?@musicin3d它确实让人感觉像是Express中的一个bug。我们发现:虽然它是经过设计的,但似乎违反了直觉,尽管故障可能出在Express把手上。本质上,作为最终用户,我们最终设置了两次扩展。