首页 > 解决方案 > 类型错误:无法读取未定义的属性“护照”

问题描述

我是护照新手并且遇到了这个问题,所以这可能是护照的一个非常基本的开发错误,我正在做的优先级是在 index.js 中:

const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
var jsonParser = bodyParser.json()

const passport = require('passport')

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

const connection = require('../../database/db.js');

router.get('/', (req, res) => {
res.render('user');
});

router.get('/login', (req, res) => {
res.render('login');
});

router.get('/home', (req, res) => {
res.send('hola');
});

router.post('/login', passport.authenticate('local.signup', {
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true
}));

module.exports = router;

而我的主文件是app.js,我在其中做passport.session,passport.json,所以这可能是错误“passport”未定义:

const express = require('express');
const morgan = require('morgan');
const path = require('path');
const app = express();
require('./lib/passport.js')

const mysql = require('mysql');
const myConnection = require('express-myconnection');
const session = require("express-session");

const passport = require('passport');

// settings
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.urlencoded({extended: false}));
app.use(express.json());
app.use(passport.initialize());
app.use(passport.session());


// middlewares
app.use(morgan('dev'));

// routes
app.use(require('./routes'));

// static files
app.use(express.static(path.join(__dirname, 'public')));

// listening the Server
app.listen(app.get('port'), () => {
console.log('Server on port', app.get('port'));
});

最后,我得到控制台的错误,但如果我无法读取错误:

TypeError: Cannot read property 'passport' of undefined
at SessionStrategy.authenticate        (C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\passport\lib\strategies\session.js:51:18)
at attempt (C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\passport\lib\middleware\authenticate.js:360:16)
at authenticate (C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\passport\lib\middleware\authenticate.js:361:7)
at Layer.handle [as handle_request] (C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\express\lib\router\index.js:317:13)
at C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\express\lib\router\index.js:275:10)
at initialize (C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\passport\lib\middleware\initialize.js:66:5)
at Layer.handle [as handle_request] (C:\Users\ZerimexPC\Downloads\rbxfleet\node_modules\express\lib\router\layer.js:95:5)

标签: mysqlnode.jsexpresspassport.js

解决方案


我认为,您的问题与护照会议有关。您需要在它之前使用 express session 才能正常工作。


推荐阅读