TypeError:无法读取属性'查找'的未定义

TypeError: Cannot read property 'lookup' of undefined

本文关键字:未定义 查找 属性 读取 TypeError      更新时间:2023-11-22

我正在尝试在Nodejs(expressjs)应用程序中设置多个视图。

参考链路

我在终端中运行node server命令时遇到了这个错误。

TypeError: Cannot read property 'lookup' of undefined

在这条线上

var lookupProxy = express.view.lookup;

我的代码出了什么问题!这是我的服务器.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)
    };
 }

由于express 4的express模块没有view属性,因此发生错误。

要解决此问题,您需要删除启用多个视图的自定义功能。这是因为Express 4已经支持多个视图。请参阅此问题:Express 的多个视图文件夹