【问题标题】:router.use TypeError: Cannot read property 'use' of undefinedrouter.use TypeError:无法读取未定义的属性“使用”
【发布时间】:2019-10-01 17:48:58
【问题描述】:

我是 node.js 的新手,请高手帮忙。 我正在准备基于 node.js + AWS Cognito + Facebook Login 进行用户同步的代码。我尝试了来自 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

“无法读取属性”是什么意思?如何解决问题? 提前致谢。


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

  • 重新安装 express

我昨天使用了 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,所以我创建了一个新的工作文件夹,再次重新启动示例代码,问题就消失了

【问题讨论】:

  • 替换 var express = require('express'); with var express = require('express')();
  • 你用的是什么版本的 Express?
  • 感谢您的帮助,修改为 require('express')();错误信息移到下面一行,TypeError: express.Router is not a function
  • express --version 显示 3.0.0
  • express.Router() 是 Express 4.x 的东西。

标签: javascript node.js express router


【解决方案1】:

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

【讨论】:

  • 这是一个不错的选择,但不能完全解决我的问题。
  • 我修复了最后一个问题,它来自本地 node_modules。昨天,当我进行设置时,我将 express 3.x 安装到本地工作文件夹中。在我重新创建示例工作文件夹后,express 4 现在运行良好。谢谢大家。
  • 我遇到了类似的问题;我在 package.json 中使用 ^3.0.0 版本,因为在尝试运行 npm install 时尝试使用 5.3.0 会导致错误。它说版本不匹配(存在!!疯了)。最后,我在 package.json 中更改为 4.16.0,现在服务器正在运行。
【解决方案2】:

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

使用:

import * as passport from "passport";

而不是

import passport from "passport";

参考:Typescript handbook

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      相关资源
      最近更新 更多