2015-10-16 67 views
4

我是新来的node.js,请高手帮忙。 我正在准备基于node.js + AWS Cognito + Facebook登录进行用户同步的代码。我试过link的一个例子。router.use TypeError:无法读取未定义的属性'use'

每一步运行平稳,直到部分

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

“脸谱与护照唱”在例如添加这一部分之后,我跑“故宫开始”,以下错误出现:

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

TypeError: Cannot read property 'use' of undefined 

“无法读取属性”的含义是什么?如何解决这个问题? 提前致谢。


一些专家后在这里帮助,我可以解决这个问题:

  • 重新安装快车

我用NPM安装-g表达发电机@昨天下午3命令,所以它使我的全球设置表达版本3.我首先卸载并安装Express。

npm uninstall -g [email protected] 
npm uninstall -g express 
npm install -g express 
npm install -g express-generator 
  • 删除本地node_modules

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

+0

replace var express = require('express');用var express = require('express')(); – Ben

+0

您使用什么版本的Express? –

+0

thx为您提供帮助,修改后需要('express')();错误消息移动到以下行,TypeError:express.Router不是函数 –

回答

5

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

+0

这是一个很好的打击,但不能完全解决我的问题。 –

+1

我修复了上一个问题,它来自本地node_modules。昨天,当我进行设置时,我将express 3.x安装到本地工作文件夹中。在我重新创建示例工作文件夹之后,表达4现在运行良好。 谢谢大家。 –

+0

我有类似的问题;我在package.json中使用^ 3.0.0版本,因为尝试使用5.3.0会在尝试运行npm install时导致错误。它说版本不匹配(存在!!疯狂)。最后,我改为4.16。0在package.json中,现在服务器正在运行。 – Pablo

-1

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

相关问题