node.js - 如何使用 Mongoose 和 Express 为用户分配帖子

标签 node.js mongodb

我目前陷入困境,如何在用户在网站上创建帖子时为其分配帖子。所以基本上我想让登录用户创建一份简历,然后将该简历作为模式中的created_by 分配给该登录用户。我已经把它排序了,但我不知道如何创建简历并将登录用户分配给它。

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId;
var moment = require('moment');
var id = require('../helpers/generator');
let beautifyUnique = require('mongoose-beautiful-unique-validation');


const ResumeSchema = new Schema({
  _id: {
    type: String,
    default: id.generate()
  },
  title: {
    type: String,
    required: true
  },
  creator: {
    type: ObjectId,
    ref: "User"
  },
  description: {
    type: String,
    default: "No description provided."
  },
  company_reviews: {
    name: {
      type: String,
      default: "RSW"
    },
    review: {
      type: String,
      default: "asodsodo"
    },
    rating: {
      type: String,
      default: "10/10"
    }
  },
  employee_reviews: {
    name: {
      type: String,
      default: "Doge Dog"
    },
    company: {
      type: String,
      default: "RSW"
    },
    review: {
      type: String,
      default: "blah blah"
    },
    rating: {
      type: String,
      default: "10/10"
    }
  },
  createdAt: {
    type: String,
    default: moment(new Date()).format("MMM DD, YYYY") // "Sun, 3PM"
  }
});

var Resume = mongoose.model('Resume', ResumeSchema);
module.exports = Resume;
<小时/>
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var moment = require('moment');
var bcrypt = require('bcrypt');
var id = require('../../helpers/generator');
let beautifyUnique = require('mongoose-beautiful-unique-validation');


const UserSchema = new Schema({
    _id: {
        type: String,
        default: id.generate()
    },
    firstName: {
        type: String,
        required: true
    },
    lastName: {
        type: String,
        required: true
    },
    accountType: {
        type: String,
        enum: ['Alphaneer', 'Administrator', 'Support', 'PRO'],
        default: 'Alphaneer'
    },
    email: {
        type: String,
        required: true,
        trim: true
    },
    username: {
        type: String,
        required: true,
        trim: true,
        unique: true
    },
    bio: {
        type: String,
        default: "No bio provided."
    },
    password: {
        type: String,
        required: true
    },
    createdAt: {
        type: String,
        default: moment(new Date()).format("MMM DD, YYYY") // "Sun, 3PM 17"
    }
});

// authenticate input against content from database. BLOODY HELL ITS A MESS
UserSchema.statics.authenticate = function(email, password, callback) {
    User.findOne({
            email: email
        })
        .exec(function(err, user) {
            if (err) {
                return callback(err);
            }
            bcrypt.compare(password, user.password, function(err, result) {
                if (result === true) {
                    return callback(null, user)
                } else {
                    return callback();
                }
            })
        })
}

UserSchema.pre('save', function(next) {
    var user = this;
    bcrypt.hash(user.password, 10, function(err, hash) {
        if (err) throw err;
        user.password = hash;
        console.log("LOG: Password hashed & user saved.");
        next();
    });
});

var User = mongoose.model('User', UserSchema);

module.exports = User;
<小时/>

我想以登录用户的身份创建一份简历

// POST /dashboard/resume/create
router.post('/resume/create', (req, res, next) => {
  Resume.create(req.body, (err, resume) => {
    if (err) {
      var err = new Error("Error:" + err);
      err.status = 404;
      next(err);
    } else {
      return res.redirect('/dashboard');
    }
  })
});
<小时/>

当我注册用户时,我还会创建一份简历。这是一件值得欢迎的事情

// POST /register
router.post('/', (req, res, next) => {
  var data = {
    firstName: req.body.fName,
    lastName: req.body.lName,
    username: req.body.username,
    email: req.body.email,
    password: req.body.password,
    bio: req.body.bio
  };
  User.create(data, (err, user) => {
    if (err) {
      throw err;
    }
    var resume = {
      title: "Welcome to NAME!"
    }
    Resume.create(resume, (err, resume) => {
      if (err) throw err;
      return res.redirect('/');
    });
  });
});

感谢任何帮助,如果没有意义,我也可以做一些进一步的解释:)

最佳答案

我想到的一个解决方案是在用户模式中保留简历的引用,每当有“POST/resume/create”时,首先将简历对象保存在简历模式中,然后使用简历引用更新用户模式。由于您的用户已登录,您应该将登录的用户详细信息保存在某个位置,例如在 req.user 中。部分代码应如下所示:

//add this code to your user Schema 
 resume: {
     type: Schema.objectId,
     ref: 'Resume'
 }

您应该修改注册函数以保存简历并更新用户模型中的简历引用。

// POST /dashboard/resume/create
router.post('/resume/create', (req, res, next) => {
  Resume.create(req.body, (err, resume) => {
    if (err) {
      var err = new Error("Error:" + err);
      err.status = 404;
      next(err);
    } else {
      //I am assuming that you have saved your resume and getting the saved object in `resume`, now update the logged in user in req.user
    var user = req.user;
    user.resume = resume._id;
 //save the updated user
    user.save((error, user) => {
      if(error) {
        //handle error
      } else {
       //you have saved the user with resume ref now.
        return res.redirect('/dashboard');
      }
    })
    }
  })
});

关于node.js - 如何使用 Mongoose 和 Express 为用户分配帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41311573/

相关文章:

javascript - sequelize 未定义 - Sequelize 和 consign

node.js - 使用 mongoClient 连接池连接不同的用户

javascript - 确保 "done()"被称为JS错误

javascript - 无法使用 $pull (Mongoose) 删除用户模型数组中的对象

json - 摆脱 JSON 中的 Mongo $ 符号

java - 如何在不使用 CAST 函数的情况下在连接级别以正确的格式 (CCSID 37) 转换 IBM DB2 十六进制数据

node.js - 用于启动前端和后端进行调试的 VS Code 设置

javascript - 如何在我的客户端代码中设置环境变量?

mysql - SailsJS/MySQL : Unknown column 'NaN' in 'field list'

mongodb - "SelectMany"- 相当于 mongodb 聚合管道