Я не могу найти проблему. Я использую две схемы пользователя и кампании. Я использую метод mon goose populate для показа кампаний путем нахождения уникального идентификатора пользователя, потому что мне нужно показывать данные только заинтересованного пользователя, но данные не поступают в шаблон e js, и мой маршрут также не заполняет схему пользователя внутри схемы кампании. Я не могу найти проблему, почему данные не отображаются. маршрут популяции правильный? если да, то мой e js шаблон правильного формата? в чем проблема ? много путаницы и борьбы с более чем 10 днями
Мой походный маршрут вроде этого
router.get("/camptab", function(req, res) {
let user = req.user.id;
Campaign.find({ user })
// User.findById(req.user.id)
.populate("userId")
.exec((err, campaign) => {
if (err) {
console.log(err);
return res.status(500).send("Something went wrong");
}
res.render("camptab", { camplist: campaign });
});
});
хранение данных вот так
![mongoose data storing like this with objectID of user in campaign schema](https://i.stack.imgur.com/ez3D8.png)
Данные кампании не отображаются ![data showing empty on screen](https://i.stack.imgur.com/4dSZq.png)
Я попытался дать ссылку в обеих схемах, но это не помогло, а затем попытался использовать ссылку в одной схеме все еще я сталкиваюсь с тем же. Я не могу понять проблему. Я хочу, чтобы пользователь мог видеть данные своей кампании после входа в систему на своей странице "/ camptab"
Мой e js шаблон
<tbody class="text-center">
<%camplist.forEach(function(camp){%>
<tr>
<td><a href="campaign/<%=camp.Title%>"><%=camp.Title%> </a></td>
<td><%=camp.Description%></td>
<td> <img src="campaign/<%=camp.Banner%>" style="width:100px; height:50px;" alt=""></td>
</tr>
<%})%>
</tbody>
Схема кампании
var mongoose = require('mongoose');
var user= require ("./User")
var Schema = mongoose.Schema;
var campaignSchema = new Schema({
Title: {type: String},
Description: { type: String },
Rules: {} ,
Banner: { type: String },
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
});
module.exports = mongoose.model('Campaigns', campaignSchema);
Схема пользователя
const bcrypt = require('bcryptjs');
const crypto = require('crypto');
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
username: String,
email: { type: String, unique: true },
password: String,
phonenumber: Number,
passwordResetToken: String,
passwordResetExpires: Date,
emailVerificationToken: String,
emailVerified: Boolean,
snapchat: String,
facebook: String,
twitter: String,
google: String,
github: String,
instagram: String,
linkedin: String,
steam: String,
quickbooks: String,
tokens: Array,
profile: {
name: String,
gender: String,
location: String,
website: String,
picture: String
}
});
/**
* Password hash middleware.
*/
userSchema.pre('save', function save(next) {
const user = this;
if (!user.isModified('password')) { return next(); }
bcrypt.genSalt(10, (err, salt) => {
if (err) { return next(err); }
bcrypt.hash(user.password, salt, (err, hash) => {
if (err) { return next(err); }
user.password = hash;
next();
});
});
});
/**
* Helper method for validating user's password.
*/
userSchema.methods.comparePassword = function comparePassword(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, (err, isMatch) => {
cb(err, isMatch);
});
};
/**
* Helper method for getting user's gravatar.
*/
userSchema.methods.gravatar = function gravatar(size) {
if (!size) {
size = 100;
}
if (!this.email) {
return `https://gravatar.com/avatar/?s=${size}&d=blank`;
}
const md5 = crypto.createHash('md5').update(this.email).digest('hex');
return `https://gravatar.com/avatar/${md5}?s=${size}&d=blank`;
};
const User = mongoose.model('User', userSchema);
module.exports = User;
Я попытался дать ссылку в обеих схемах, но это не работает, а затем попытался использовать ref в одной схеме, все еще я сталкиваюсь с тем же. Я не могу понять проблему. Я хочу, чтобы пользователь мог видеть данные своей кампании после входа в систему на своей странице "/ camptab"
Я попытался дать ссылку в обеих схемах, но это не помогло, а затем попытался использовать ref в одной схеме, но я столкнулся с тем же. Я не могу понять проблему. Я хочу, чтобы пользователь мог видеть данные своей кампании после входа в систему на своей странице "/ camptab"