Данные не извлекаются при запросе из эталонной схемы базы данных goose? - PullRequest
0 голосов
/ 30 января 2020

Я не могу найти проблему. Я использую две схемы пользователя и кампании. Я использую метод 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

Данные кампании не отображаются data showing empty on screen

Я попытался дать ссылку в обеих схемах, но это не помогло, а затем попытался использовать ссылку в одной схеме все еще я сталкиваюсь с тем же. Я не могу понять проблему. Я хочу, чтобы пользователь мог видеть данные своей кампании после входа в систему на своей странице "/ 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"

1 Ответ

0 голосов
/ 31 января 2020

В вашем маршруте camptab

Вы не используете правильный формат для получения информации о пользователе из базы данных. Попробуйте,

Campaign.findById(user)

или

Campaign.find({_id : user})

Оба они работают. Я обычно использую первый при получении данных с использованием идентификатора.

...