【发布时间】:2021-06-19 14:25:35
【问题描述】:
我在使用车把方面需要帮助。我正在尝试使用{{user.username}} 将用户名插入我的index.hbs。问题是它向我展示了这一点:
Handlebars:访问已被拒绝解析属性“用户名” 因为它不是其父级的“自己的财产”。
const express = require('express');
const path = require('path');
const exphbs = require('express-handlebars');
const methodOverride = require('method-override');
const session = require('express-session');
const flash = require('connect-flash');
const passport = require('passport');
const app = express();
require('./database');
require('./config/passport');
//Configuracion
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.engine('.hbs', exphbs({
defaultLayout: 'main',
layoutsDir: path.join(app.get('views'), 'layouts'),
partialsDir: path.join(app.get('views'), 'partials'),
extname: '.hbs'
}));
app.set('view engine', '.hbs');
//Middlewares
app.use(express.urlencoded({extended: false}));
app.use(methodOverride('_method'));
app.use(session({
secret: 'clavesecreta',
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
//Variables
app.use((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');
res.locals.user = req.user || null;
next();
});
//Routes
app.use(require('./routes/index'));
app.use(require('./routes/videos'));
app.use(require('./routes/users'));
//Archivos estaticos
app.use(express.static(path.join(__dirname, 'public')));
//Iniciar server
app.listen(app.get('port'), () => {
console.log('El servidor esta escuchando en el puerto', app.get('port'))
});
这是我获得user.username 的地方。我还插入了我的user.js 模型:
const mongoose = require('mongoose');
const { Schema } = mongoose;
const bcrypt = require('bcryptjs');
const UserSchema = new Schema({
username: { type: String, required: true},
email: { type: String, required: true},
password: {type: String, required: true},
date: {type: Date, default: Date.now}
});
UserSchema.methods.encryptPassword = async (password) => {
const salt = await bcrypt.genSalt(10);
const hash = bcrypt.hash(password, salt);
return hash;
};
UserSchema.methods.matchPassword = async function (password){
return await bcrypt.compare(password, this.password);
};
module.exports = mongoose.model('User', UserSchema)
【问题讨论】:
-
大概
req.user不是一个普通的对象,但是没有minimal reproducible example就很难说它是从哪里来的。 -
我刚刚更新了我所有的 index.js,对此我很抱歉,但我是新手。在我的 hbs 我只插入 {{user.username}}
-
好吧,我以前研究过这个,我解决了我的代码上的很多问题。问题是我不能在 res.locals.user = req.user || 中放置一个 .lean()空值;所以我不知道该怎么办
标签: node.js handlebars.js