router.use TypeError: Cannot read property 'use' of undefined

router.use TypeError: Cannot read property 'use' of undefined

我是node.js新手,请高手帮忙。 我正在准备基于 node.js + AWS Cognito + Facebook 登录进行用户同步的代码。我尝试了这个 link.

中的一个例子

每一步 运行 都很顺利,直到 "facebook sing in with passport" 节

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

"Cannot read property"是什么意思?如何解决这个问题? 提前致谢。


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

我昨天使用了 npm install -g express-generator@3 命令,所以它使我的全局设置为 express 版本 3。我先卸载并重新安装 express。

npm uninstall -g express-generator@3
npm uninstall -g express
npm install -g express
npm install -g express-generator

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

您所关注的教程是基于 4.x 版本的 Express 框架编写的。有制作 significant changes regarding routing process in Express 4.x, comparing with 3.x version. In particular, express.Router() object was added. So, or you have to adept your code (this 可能对你有帮助),以使其工作,或升级 Express 版本。

我运行遇到了类似的问题。我将代码放在 app.use(express.static...) 之后,它起作用了。

如果你用的是typescript和es6导入,和运行一样的问题。

使用:

import * as passport from "passport";

而不是

import passport from "passport";

参考:Typescript handbook