Вставка записи из функции mon goose model.statics - PullRequest
0 голосов
/ 05 января 2020

Я хочу создать функцию stati c в модуле mon goose "log", которая позволила бы мне написать сообщение в виде записи журнала.

Как получить доступ к модели из в функции stati c? Могу ли я использовать this.model, как показано ниже? Я не хочу просто использовать встроенную команду вставки MongoDB, потому что я хочу, чтобы модель проверяла ввод, и т. Д. c.

// ... schema defined above...
var Log = mongoose.model('Log', LogModelSchema)
Log.statics.log = function(message) {
    var x = new this.model({message: message})
    x.save()
        .then(() => { .. do something .. }
        .catch((err) => { .. handle  err .. }
}

Это так, как это должно быть сделано?

1 Ответ

1 голос
/ 05 января 2020

Вы можете сделать так, чтобы это работало, используя this.create:

const mongoose = require("mongoose");

const logSchema = new mongoose.Schema({
  message: String
});

logSchema.statics.log = function(message) {
  this.create({ message: message })
    .then(doc => console.log(doc))
    .catch(err => console.log(err));
};

module.exports = mongoose.model("Log", logSchema);

Теперь вы можете использовать это в своих маршрутах следующим образом:

Log.log("test");

или просто вернуть обещание из статики :

logSchema.statics.log = function(message) {
  return this.create({ message: message });
};

И используйте вот так:

const Log = require("../models/log");

router.get("/log", (req, res) => {
  Log.log("test")
    .then(result => {
      console.log(result);
      res.send("ok");
    })
    .catch(err => {
      console.log(err);
      res.status(500).send("not ok");
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...