router.use TypeError: 无法读取未定义的属性"use"



我是node.js新手,专家们,请帮帮我。我正在准备一个代码做基于node.js + AWS Cognito + Facebook登录用户同步。我从这个链接尝试了一个例子。

每一步都很顺利,直到"facebook sing in with passport"部分

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

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

C:workspacenodejsCognitoExampleroutesindex.js:35
router.use(passport.initialize());
      ^
TypeError: Cannot read property 'use' of undefined

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


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

  • 安装表达

我昨天使用了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之后,同样的问题仍然存在,我发现我安装了express 3。所以我创建了一个新的工作文件夹,重新启动示例代码,问题消失了

您正在遵循的教程是基于4编写的。Express框架的x版本。Express 4在路由处理方面做了重大改变。X,与3比较。x版本。特别增加了express.Router()对象。因此,或者您必须熟练使用您的代码(这可能对您有所帮助),以便使其工作,或者升级Express版本。

如果你使用的是typescript &es6导入时,也会遇到同样的问题。

使用:

import * as passport from "passport";
不是

import passport from "passport";

参考:Typescript手册

我遇到了类似的问题。我把代码放在app.use(express.static...)之后,它工作了。

相关内容

最新更新