node.js - 类型错误 : Cannot read property 'passport' o

我目前正在使用 Express、Node、Mongoose 和 Passport.js 开发注册和登录系统,并且注册大部分工作正常,但登录系统存在一个大问题。由于某种原因,在我创建护照的方法中无法读取未定义的“护照”,因此出现未定义的情况,但我似乎无法弄清楚。 我不知道为什么它不起作用,请帮忙!!

这是我的代码 应用程序.js

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const cors = require('cors');
const passport = require('passport');
const mongoose = require('mongoose');
const config = require('./config/database');

mongoose.connect(config.database);

mongoose.connection.on('connected', () => {
    console.log('Connected to database ' + config.database);
});

mongoose.connection.on('error', (err) => {
    console.log('Database error:' + err);
});


const app = express();
const users = require('./routes/users');
const port = 3000;

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

app.use(bodyParser.json());

app.use(passport.initialize());
app.use(passport.session());

app.use('/users', users);

app.get('/', (req, res) => {
 res.send('Invalid Endpoint');
});

app.listen(port, () =>{
console.log('Server started on port' + port);
});

    users.js 

const express = require('express');
const router = express.Router();
const passport = require('passport');
const jwt = require('jsonwebtoken');
const User = require('../models/user');



router.post('/register', (req, res, next) =>{
    let newUser = new User({
        name: req.body.name,
        email: req.body.email,
        username: req.body.username,
        password: req.body.password
    });

    User.addUser(newUser, (err, user) => {
        if(err){
            res.json({success: false, msg:'Failed to register user'});
        }else {
            res.json({success: true , msg:'User registered'});
        }
    });
});

router.post('/authenticate', (req, res, next) =>{
    res.send('AUTHENTICATE');
});

router.get('/profile', (req, res, next) =>{
    res.send('PROFILE');
});



module.exports = router;

最佳答案

您的问题与通行证 session 有关。在它正常工作之前,你需要使用 express session(记得在你的依赖项中安装)。

你的 app.js 应该是这样的:

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const cors = require('cors');
const passport = require('passport');
const mongoose = require('mongoose');
const config = require('./config/database');
const session = require("express-session");

mongoose.connect(config.database);

mongoose.connection.on('connected', () => {
    console.log('Connected to database ' + config.database);
});

mongoose.connection.on('error', (err) => {
    console.log('Database error:' + err);
});


const app = express();
const users = require('./routes/users');
const port = 3000;

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

app.use(bodyParser.json());

app.use(session({secret: "secret"});

app.use(passport.initialize());
app.use(passport.session());

app.use('/users', users);

app.get('/', (req, res) => {
    res.send('Invalid Endpoint');
});

app.listen(port, () =>{
    console.log('Server started on port' + port);
});

此外,请记住,对于 Express 4.16.0 或更高版本,正文解析器已被弃用。它已在方法 express.json()express.urlencoded() 中重新添加,因此如果您的 Express 版本属于该类别,您可以更改您的 app.js到:

const express = require('express');
const path = require('path');
const cors = require('cors');
const passport = require('passport');
const mongoose = require('mongoose');
const config = require('./config/database');
const session = require("express-session");

mongoose.connect(config.database);

mongoose.connection.on('connected', () => {
    console.log('Connected to database ' + config.database);
});

mongoose.connection.on('error', (err) => {
    console.log('Database error:' + err);
});


const app = express();
const users = require('./routes/users');
const port = 3000;

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

app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(session({secret: "secret"});

app.use(passport.initialize());
app.use(passport.session());

app.use('/users', users);

app.get('/', (req, res) => {
    res.send('Invalid Endpoint');
});

app.listen(port, () =>{
    console.log('Server started on port' + port);
});

我建议在您的代码中添加注释以保持代码整洁。

关于node.js - 类型错误 : Cannot read property 'passport' of undefined nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69348404/

相关文章:

android - 如何从 Webview 中访问摄像头?

reactjs - 如何去除 Material-UI 对话框中的阴影?

c# - 通过列表循环 foreach,为不同的值执行代码

python - 如何旋转图像以获得非空像素?

javascript - Cypress 最佳实践 - 存储和比较两个值

c - 尝试将二维字符串数组传递给函数并打印它

ios - 更改 iOS 15 中导航栏的当前颜色

c - 打印 int_fast_32_t 等数据类型的可移植和正确方法是什么

loops - 如何在 Kotlin 循环内更改 for 循环的计数器变量值?

c# - 在 C# 中,如何使用 `TryAsync` 的实例?