我是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...)
之后,它工作了。