猫鼬。在post hook

时间:2018-05-31 21:08:12

标签: node.js mongoose

关于mongoose(NodeJS ORM)。我尝试使用prepost个钩子。我有一个config架构,在save之后我要调用post挂钩,在其上使用writeFile。我的代码如下所示:

configSchema.post('save', function(result) {
  const config = {};
  Object.entries(this).forEach(([key, item]) => {
    if(key.charAt(0) !== '_') config[key] = item;
    console.log(`config[${key}] = ${config[key]}`);
  });

  const newConfig = JSON.stringify(config);
  const JSON_FILE = path.join(__dirname, '../config.json');
  return fs.writeFile(JSON_FILE, newConfig, 'utf8', (err) => {
    if (err) console.log(err);
  });
});

但是在这种情况下thisresult没有返回最终文档,我甚至不知道在哪里找到他。如何在save钩子中获得pre的结果?

UPD。我在this.toJSON()

中找到了解决方案

现在我的代码如下:

configSchema.post('save', function(result) {
  const config = {};
  const oldConfig = this.toJSON();

  Object.entries(oldConfig).forEach(([key, item]) => {
    console.log(`key.charAt(0) === ${key.charAt(0)}`);
    if(key.charAt(0) !== '_') config[key] = item;
  });

  const newConfig = JSON.stringify(config);
  const JSON_FILE = path.join(__dirname, '../config.json');
  return fs.writeFile(JSON_FILE, newConfig, 'utf8', (err) => {
    if (err) console.log(err);
  });
});

1 个答案:

答案 0 :(得分:0)

我们可以使用this

获取toJSON的结果
this.toJSON()