需要将套接字服务器插入控制器
Require socket server into controller
所以基本上我试图用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);
}
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 将样式表插入iframe
- 需要将套接字服务器插入控制器
- 将特性插入到角度控制器中阵列中的对象中的最佳方式
- 如何通过AngularJS中的一个调用在多个控制器($scope)中插入相同的数据
- Ember.js将视图插入应用程序控制器,但使用另一个控制器进行操作
- 在模板中以字符串形式动态插入ng控制器
- 动态插入嵌套控制器
- 尝试从AngularJS中的控制器($scope)将元素插入到视图(HTML)中
- 角度插入的HTML未附加到控制器
- 如何从角度控制器向视图中插入指令
- 从 AngularJS 控制器将 HTML 插入视图
- 角度指令>动态控制器名称>插入控制器名称
- 从ng-repeat元件插入控制器
- 尝试使用对控制器的ajax调用将搜索结果插入到表中会导致错误
- 如何从angularjs中的子控制器将新行插入表中
- 插入部件时无需呼叫把手助手或带插座的控制器
- 动态编译由javascript插入的angular控制器
- 需要将JSON对象插入到Angular.JS控制器的作用域中