router.use TypeError:无法读取属性'使用'未定义的

时间:2015-10-16 06:10:53

标签: javascript node.js express router

我是node.js的新手,专家,请​​帮忙。 我正准备基于node.js + AWS Cognito + Facebook Login进行用户同步的代码。我尝试了这个link的例子。

每一步都顺利进行,直到" facebook用护照和#34;节

var express = require('express');
var router = express.Router();
var passport = require('passport');
...
router.use(passport.initialize());
...

在示例中添加此部分后,我运行" npm start",出现以下错误:

C:\workspace\nodejs\CognitoExample\routes\index.js:35
router.use(passport.initialize());
      ^

TypeError: Cannot read property 'use' of undefined

&#34的含义是什么;无法读取属性"?如何解决问题? 提前谢谢。

经过几位专家的帮助,我可以解决问题:

  • 重新安装快递

我昨天使用了npm install -g express-generator @ 3命令,因此它使我的全局设置表达版本3.我首先卸载并安装express。

npm uninstall -g express-generator@3
npm uninstall -g express
npm install -g express
npm install -g express-generator
  • 删除本地node_modules

在第1步之后,同样的问题仍然存在,我发现我之前在本地工作文件夹中安装了快递3.x,所以我创建了一个新的工作文件夹,再次重启示例代码,问题就消失了

3 个答案:

答案 0 :(得分:5)

您所遵循的教程是基于4.x版本的Express框架编写的。 Express 4.x中有significant changes regarding routing process,与3.x版本相比。特别是,添加了express.Router()个对象。所以,或者您必须熟悉您的代码(this可能会帮助您),以使其工作,或升级Express版本。

答案 1 :(得分:0)

如果您使用的是 typescript和es6 导入,并遇到相同的问题。

使用:

import * as passport from "passport";

代替

import passport from "passport";

请参阅:Typescript handbook

答案 2 :(得分:-1)

我遇到了类似的问题。我在app.use(express.static...)之后放置了代码并且它有效。