当我尝试使用我的EJS页面中的数据时,它给出了以下错误:
TypeError: C:\Users\ygor\Documents\VS Code\Digital House\PI-DevNap\src\views\user.ejs:22
20| <a class='photo' href="#"><img src="/images/camera-change.png" alt="Câmera"></a>
21| <div class="hello-user">
>> 22| <h3>Olá <%= user.name %>
23|
24| </h3>
25| <h6>
这是有问题的控制器代码:
index: async (req, res) => {
const user = await req.user;
if (user) {
return res.redirect('/account');
}
return res.render('user', { user } )
},
这是会话创建代码:
login: (req, res) => {
const { email, password, remember } = req.body
const hasToRemember = !!remember;
const user = users.find(user => user.email === email)
if (!user) {
return res.render('login', {
error: 'Username or password incorrect.'
})
}
if (!bcrypt.compareSync(password, user.password)) {
return res.render('user', {
error: 'Username or password incorrect.'
})
}
req.session.email = user.email;
if (hasToRemember) {
res.cookie('user', user.email, { maxAge: 5000 });
}
res.redirect('/account')
},
路由器:
router.get('/', cookie, usersController.index)
MySQL数据库:(https://i.stack.imgur.com/BsJxw.png)
迁移:
module.exports = {
async up (queryInterface, Sequelize) {
await queryInterface.createTable('users', {
id: {
type: Sequelize.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING(100),
allowNull: false,
unique: true
},
password: {
type: Sequelize.STRING(1000),
allowNull: false
}
})
},
async down (queryInterface, Sequelize) {
await queryInterface.dropTable('users')
}
中间件(cookie):
const getInfoDatabase = require('../utils/getInfoDatabase')
const users = getInfoDatabase('users')
function cookie(req, res, next) {
const email = req.cookies.user || req.session.email;
if (Boolean(email)) {
const userSession = users.find(user => user.email === email)
req.user = userSession
}
return next()
}
module.exports = cookie
EJS代码:
<body>
<%- include('partials/header') %>
<main>
<h2 class="myaccount">MINHA CONTA</h2>
<section class="account-infos">
<div class="history">
<a class='photo' href="#"><img src="/images/camera-change.png" alt="Câmera"></a>
<div class="hello-user">
<h3>Olá <%= user.name %>
</h3>
我希望它能捕获
const user = await req.user;
if (user) {
return res.redirect('/account');
}
return res.render('user', { user } )
但我认为这是不可能的
对不起,如果这已经回答过,这是我的第一个问题,我还没有找到一个解决方案,看看其他线程。
2条答案
按热度按时间dgiusagp1#
用户在EJS页面中显示为undefined,因此要解决这个问题,只需实现以下代码。
w8ntj3qf2#
好了,修改完这个之后,我已经理解了我在以前的awnser中的错误。基本上看起来这个问题是与传递到EJS视图的用户对象有关的。用户对象没有定义,所以当EJS视图试图访问用户的name属性时,它会失败并返回一个TypeError。要修复这个问题,你可以只确保用户对象被定义并且有一个name属性。2例如:
这样,当控制器中的索引方法试图访问请求中的用户对象时,它将被定义并具有EJS视图所需的属性。
希望这对你有帮助!