我试图在Nodejs(expressjs)app中设置多个视图。
在终端中运行node server
命令时出现此错误。
TypeError: Cannot read property 'lookup' of undefined
在这一行
var lookupProxy = express.view.lookup;
我的代码出了什么问题!这是我的server.js:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
enableMultipleViewFolders(express);
app.set('views', [__dirname + '/admin/views', __dirname + '/client/views']);
app.engine('html', require('ejs').renderFile);
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.listen(port, function(){
console.log('Listening on port ' + port); //Listening on port 8888
});
app.get('/', function (req, res) {
res.render('index.html');
});
app.get('/partials/:name', function (req, res) {
console.log(req.params.name);
res.render('partials/' + req.params.name);
});
function enableMultipleViewFolders(express) {
// proxy function to the default view lookup
var lookupProxy = express.view.lookup;
express.view.lookup = function (view, options) {
if (options.root instanceof Array) {
// clones the options object
var opts = {};
for (var key in options) opts[key] = options[key];
// loops through the paths and tries to match the view
var matchedView = null,
roots = opts.root;
for (var i=0; i<roots.length; i++) {
opts.root = roots[i];
matchedView = lookupProxy.call(this, view, opts);
if (matchedView.exists) break;
}
return matchedView;
}
return lookupProxy.call(express.view, view, options)
};
}
答案 0 :(得分:0)
发生错误是因为Express 4的express模块没有view
属性。
要解决此问题,您需要删除自定义功能以启用多个视图。这是因为Express 4已经支持多个视图。请参阅此问题:multiple view folders for Express