首页 > 解决方案 > 当我在 index.js 中调用它时无法读取未定义的属性“名称”

问题描述

当我将name: req.user.name传递给我的 ejs 文件时,它给了我undefined,你能帮我解决这个问题吗?如果您需要,请告诉我您是否需要更多信息。我尝试了很多方法,但都没有奏效。谢谢您的帮助。

错误:

当我在 index.js 中调用它时无法读取未定义的属性“名称”

应用程序.js

const express = require("express");
const expressLayouts = require('express-ejs-layouts');
const mongoose = require("mongoose");
const app = express();
const passport = require('passport');
const flash = require('connect-flash');
const session = require('express-session');
const PORT = process.env.PORT || 3000;
const nodemailer = require("nodemailer");
const bodyParser = require("body-parser");
var exphbs = require('express-handlebars');
app.engine('handlebars', exphbs());
app.set('view engine', 'handlebars');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static("public"));

app.get("/home", function(req, res) {
    res.sendFile(__dirname + "/index.html")
})
app.get("/login", function(req, res) {
    res.sendFile(__dirname + "/login.ejs")
})

app.get("/signup", function(req, res) {
    res.sendFile(__dirname + "/register.html")
})

app.get("/payment", function(req, res) {
    res.sendFile(__dirname + "/payment.html")
})

app.get("/companyInfo", function(req, res) {
    res.sendFile(__dirname + "/companyInfo.html")
})

app.get("/FAQ", function(req, res) {
    res.sendFile(__dirname + "/Faq.html")
})

app.get("/contactUs", function(req, res) {
    res.sendFile(__dirname + "/contactUs.html")
})




app.post("/contactUs", function(req, res) {

    const output = `
    <h1>You have a new feedback</h1>
    <ul>  
      <h3>Full Name: ${req.body.name}</h3>
      <h3>Full Email: ${req.body.email}</h3>
      <h3>Order Number: ${req.body.orderNumber}</h3>
    </ul>
    <h1>The Subject</h3>
    <h3>${req.body.subject}</h1>
  `;



    var transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: "sziacustomer@gmail.com",
            pass: "Sziaszia12"
        }
    });

    var mailOptions = {
        from: req.body.email,
        to: 'TEAMSZIA@GMAIL.COM',
        subject: 'Costumers Email',
        html: output

    };

    transporter.sendMail(mailOptions, function(error, info) {
        if (error) {
            console.log(error);
            res.sendFile(__dirname + ("/failed.html"), { msg: "email sent" });


        } else {
            console.log('Email sent: ' + info.response);
            res.sendFile(__dirname + ("/success.html"), { msg: "email sent" });
        }

    });
});
//bodyparser 
app.use(express.urlencoded({ extended: false }))

const db = require("./config/keys").mongoURI;
require('./config/passport')(passport);

// Express session
app.use(
    session({
        secret: 'secret',
        resave: true,
        saveUninitialized: true
    })
);

// Passport middleware
app.use(passport.initialize());
app.use(passport.session());



// connect flash 
app.use(flash());

// Global variables
app.use(function(req, res, next) {
    res.locals.success_msg = req.flash('success_msg');
    res.locals.error_msg = req.flash('error_msg');
    res.locals.error = req.flash('error');
    next();
});


//connect mangodb using mongoose 
mongoose.connect(db, { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => console.log("mongoo bd connected"))
    .catch(() => console.log(err));

//ejs
app.use(expressLayouts);
app.set('view engine', 'ejs');

app.use("/", require("./routes/index"));
app.use("/dashboard", require("./routes/index"));
app.use("/users", require("./routes/users"))
app.listen(PORT, console.log(`we are live on ${PORT}`));
*

索引.js*

const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");
const bcrypt = require('bcryptjs');
const User = require('../models/User');
const users = require("./users");
const LocalStrategy = require('passport-local').Strategy;

const { ensureAuthenticated } = require("../config/auth")

router.get("/", users, (req, res) =>
    res.render("welcome", {
        login: req.isAuthenticated(),
        name: req.user.name //undefined

    }))

用户.js

const express = require("express");
const router = express.Router();
const bcrypt = require("bcryptjs");
const User = require("../models/User");
const passport = require("passport")
router.get("/login", (req, res) => res.render("login"));
router.get("/register", (req, res) => res.render("register"));

router.post('/register', (req, res) => {
    const { name, email, password, password2 } = req.body;
    let errors = [];

    if (!name || !email || !password || !password2) {
        errors.push({ msg: 'Please enter all fields' });
    }

    if (password != password2) {
        errors.push({ msg: 'Passwords do not match' });
    }

    if (password.length < 6) {
        errors.push({ msg: 'Password must be at least 6 characters' });
    }

    if (errors.length > 0) {
        res.render('register', {
            errors,
            name,
            email,
            password,
            password2
        });
    } else {
        User.findOne({ email: email }).then(user => {
            if (user) {
                errors.push({ msg: 'Email already exists' });
                res.render('register', {
                    errors,
                    name,
                    email,
                    password,
                    password2
                });
            } else {
                const newUser = new User({
                    name,
                    email,
                    password
                });

                bcrypt.genSalt(10, (err, salt) => {
                    bcrypt.hash(newUser.password, salt, (err, hash) => {
                        if (err) throw err;
                        newUser.password = hash;
                        newUser
                            .save()
                            .then(user => {
                                req.flash(
                                    'success_msg',
                                    'You are now registered and can log in'
                                );
                                res.redirect('/users/login');
                            })
                            .catch(err => console.log(err));
                    });
                });
            }
        });
    }
});

// Login
router.post('/login', (req, res, next) => {
    passport.authenticate('local', {
        successRedirect: '/',
        failureRedirect: '/users/login',
        failureFlash: true,

    })(req, res, next);
});

// Logout
router.get('/logout', (req, res) => {
    req.logout();
    req.flash('success_msg', 'You are logged out');
    res.redirect('/users/login');
});

module.exports = router;

护照.js

const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcryptjs');

// Load User model
const User = require('../models/User');

module.exports = function(passport) {
    passport.use(
        new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
            // Match user
            User.findOne({
                email: email
            }).then(user => {
                if (!user) {
                    return done(null, false, { message: 'That email is not registered' });
                }

                // Match password
                bcrypt.compare(password, user.password, (err, isMatch) => {
                    if (err) throw err;
                    if (isMatch) {
                        return done(null, user);
                    } else {
                        return done(null, false, { message: 'Password incorrect' });
                    }
                });
            });
        })
    );

    passport.serializeUser(function(user, done) {
        done(null, user.id);
    });

    passport.deserializeUser(function(id, done) {
        User.findById(id, function(err, user) {
            done(err, user);
        });
    });

}

auth.js

module.exports = {
    ensureAuthenticated: function(req, res, next) {
        if (req.isAuthenticated()) {
            return next();
        }
        req.flash('error_msg', 'Please log in to view that resource');
        res.redirect('/users/login');
    },
    forwardAuthenticated: function(req, res, next) {
        if (!req.isAuthenticated()) {
            return next();
        }
        res.redirect('/');


 }
}

标签: javascriptnode.jsexpress

解决方案


推荐阅读