Как получить почтовый хук mongoose из другого файла / функции js? - PullRequest
0 голосов
/ 14 марта 2019

У меня есть это location.model.js,

'use strict';

var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var LocationsSchema = new Schema({
 name: String,
 description: String,
 country_id:{
    type: Schema.Types.ObjectId,
    ref: 'Countries'
 },
 geo_location:{
    type: [Number] 
 },
 icon: String,
 image: String,
 status: {
    type: Boolean,
    default: true
 },
 created_at : {
    type: Date,
    default: new Date()
 },
 updated_at: {
    type: Date
 }
});
LocationsSchema.index({ geo_location: "2dsphere" });
module.exports = mongoose.model('Locations', LocationsSchema);

Я делаю такие запросы, как поиск, сохранение, обновление из файла контроллера.У меня есть файл location.socket, подобный этому.

'use strict';
var locations = require('./locations.model');

exports.register = function(socket) {
  //socket.emit('locations:save', 'Helloooo');
  locations.schema.post('save', function (doc) {
    console.log('new location added');
  });
}

Хук для сохранения поста мангуста работает нормально, если я помещу этот хук в модель.Но тот же хук не срабатывает, когда я помещаю в файл location.socket.js.Так что все, что мне нужно, это сделать socket.emit из этого файла location.socket.js

Edit1: это app.js (файл запуска сервера)

    var server = require('http').createServer(app);
    var socketio = require('socket.io')(server, {
      serveClient: config.env !== 'production',
      path: '/socket.io'
    });
    require('./config/socketio')(socketio);
    require('./config/express')(app);
    require('./routes')(app);

    server.listen(config.port, config.ip, function () {
          console.log('server started');
    });

, а вот socketio configфайл,

module.exports = function (socketio) {
  socketio.on('connection', function (socket) {
    require('../api/locations/locations.socket').register(socket);
  })
}

1 Ответ

0 голосов
/ 18 марта 2019

Пожалуйста, попробуйте это: -

module.exports = function (socketio) {
  require('../api/locations/locations.socket').register(socketio)
}

exports.register = function(socketio) {
  socketio.emit('locations:save', 'Helloooo');
}

Но это будет излучать каждый подключенный сокет.Поэтому, если вам нужно подключиться к определенной розетке, вам нужно использовать комнаты в socketio.

...