首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Express.js & mongoose:使用bdhash设置默认值(异步)

Express.js & mongoose:使用bdhash设置默认值(异步)
EN

Stack Overflow用户
提问于 2018-10-26 03:38:54
回答 1查看 206关注 0票数 1

我如何在我的mongoose模式中为一个字段设置默认值(比如bdhash,它是异步的)?现在我只看到了内心的希望。但是为什么呢?看起来我使用async/await的方式是正确的。我也试着在一个钩子('validate')中这样做

代码语言:javascript
复制
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
bcrypt = require('bcrypt');

hashIt = async () => {
  let pwd = new Date();
  pwd = pwd.toUTCString() + Math.random();

  return await bcrypt.hash(pwd, Number(process.env.SALT_WORK_FACTOR));
};

const businessSchema = new mongoose.Schema(
  {
    name: {
      type: String,
      trim: true,
      unique: 'Please enter a unique business name',
      required: 'Please enter a business name'
    },
    salt: {
      type: String,
      trim: true,
      default: () => {
        return hashIt();
      },
      required: 'Please enter a business salt'
    },
    created: {
      type: Date,
      default: Date.now
    }
  },
  {
    toJSON: { virtuals: true },
    toObject: { virtuals: true }
  }
);

/* Also tried this way 
businessSchema.pre('validate', next => {
  if (this.salt) {
    return next();
  }

  this.salt = hashIt();
  next();
}); */

module.exports = mongoose.model('Business', businessSchema);

有可能这样做吗?又是如何做到的?最好的方法:)

EN

回答 1

Stack Overflow用户

发布于 2018-10-26 03:45:48

请参阅http://mongoosejs.com/docs/defaults.html

检查此示例:

代码语言:javascript
复制
var schema = new Schema({
  title: String,
  genre: {type: String, default: 'Action'}
});

var Movie = db.model('Movie', schema);

var query = {};
var update = {title: 'The Terminator'};
var options = {
  // Create a document if one isn't found. Required
  // for `setDefaultsOnInsert`
  upsert: true,
  setDefaultsOnInsert: true
};

Movie.
  findOneAndUpdate(query, update, options, function (error, doc) {
    assert.ifError(error);
    assert.equal(doc.title, 'The Terminator');
    assert.equal(doc.genre, 'Action');
  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52996873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档