需要将套接字服务器插入控制器

Require socket server into controller

本文关键字:插入 控制器 服务器 套接字      更新时间:2024-03-10

所以基本上我试图用MVC结构来设置我的节点(express)项目。问题是,当我需要在我的任何控制器中提供一个套接字实例时,因为我总是没有定义。知道如何改进这个代码吗?

//server.js

var express = require('express');
var socketio = require('socket.io');
var homeController = require('./controllers/home');
var app = express();
app.post('/api/chat/messages/:room', homeController.postChatMessages);
var server = app.listen(app.get('port'), function(){
    console.log('Express server listening on port ' + app.get('port'));
});
var io = socketio.listen(server);
module.exports = io;

//控制器home.js

var io = require('../server');
var Chat = require('../models/chat');
console.log(io); //GET UNDEFINED
exports.postChatMessages = function(req, res) {
Chat.findOne({ name: req.params.room }, function(err, chat) {
    if (chat) {
        chat.users._id = req.user;
        chat.messages.push({
            text: req.body.message
        });
        chat.save(function(err, saved) {
            if (err) {
                res.send(err);
                return console.log(err);
            }
            res.send(saved);
            io.sockets.emit('receiveMessage', saved);
        })
    }else{
        return res.status(400).send({ message: 'This chat room is not registered or maybe is not active.' });
    }
});
};

您需要将正确的对象传递给控制器。你正在创建一个新对象,所以你没有正确的引用。这有一些可能性,我只给你看一个。。。我无法测试代码,但我想你已经明白了。祝好运

在app.js 中

var homeController = require('./controllers/home')(io);

在home.js中,你必须做更多的工作:

var HomeController = function(io){
  this.postChatMessages = function(req, res) {
    Chat.findOne({ name: req.params.room }, function(err, chat) {
      if (chat) {
        chat.users._id = req.user;
        chat.messages.push({
          text: req.body.message
        });
        chat.save(function(err, saved) {
          if (err) {
            res.send(err);
            return console.log(err);
          }
          res.send(saved);
          io.sockets.emit('receiveMessage', saved);
        });
      }else{
        return res.status(400).send({ message: 'This chat room is not registered or maybe is not active.' });
      }
    });
  };
}
module.exports = function(io){
  return new HomeController(io);
}