Я новичок в Node.js и Mongoose, и я хотел бы вызвать / перехватить событие при запуске конструктора объекта.
IE, я хотел бы отправить электронное письмо, когда персонаж создаетсякак это:
controller.on('characterCreated', (mail, objectCreated) => {
mailSenderFunction(mail, objectCreated);
});
Я нахожусь в структуре node.js Модель / Сервис / Контроллер с MongoDB и mongoose вот так:
characterModel.js
const mongoose = require('mongoose');
const characterSchema = new mongoose.Schema({
name: String,
age: Number,
});
var Character = mongoose.model('Character', characterSchema);
module.exports = Character;
characterService.js
const Character = require('../models/modelCharacter.js');
function create(name, age) {
return (new Promise((resolve, reject) => {
const character = new Character();
character.name = name;
character.age = age;
character.save((err) => {
if (err) {
reject({ status: 500, error: err });
} else {
resolve({ status: 202, data: character });
}
});
}));
}
module.exports = {
create,
};
characterController.js
const charService = require('../services/characterService');
function create(req, res) {
if (req.body.name && req.body.age) {
charService.create(req.body.name, req.body.age);
.then((result) => {
res.json(result.data);
res.status(result.status).end();
})
.catch((error) => {
res.status(result.status).end();
})
} else {
res.status(404).end();
}
}
module.exports = {
create,
};
api.js:
const router = require('express').Router();
const characterController = require('./routes/characterController');
router
.route('/characters')
.post(characterController.create);
Моя первая идея заключается в следующем:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('myCustomEvent', (mail, data) => {
mailSenderFunction(mail, objectCreated);
})
и используйте его так:
characterService.js:
...
const character = new Character();
...
character.save((err) => {
...
myEmitter.emit('myCustomEvent', mail, character);
})
...
Но я видел, что с помощью mongoose мы, вероятно, можем слышать о событиях в базе данных, но я не узналкак.
Есть ли метод мангуста или что-то еще, чтобы сделать это?Спасибо.