Routes Node.js-如何从app.js外部发出socket.io事件?
除了在app.js文件的底部处理我的所有事件外,我一直在尝试以一种简单而有效的方式组织我的应用程序 我不得不说,我的应用程序很简单,我不是专业开发人员,所以我在寻找一些简单的东西。我发现的其他解决方案都太复杂了 我的项目的文件夹结构如下所示:Routes Node.js-如何从app.js外部发出socket.io事件?,routes,socket.io,mongoose,Routes,Socket.io,Mongoose,除了在app.js文件的底部处理我的所有事件外,我一直在尝试以一种简单而有效的方式组织我的应用程序 我不得不说,我的应用程序很简单,我不是专业开发人员,所以我在寻找一些简单的东西。我发现的其他解决方案都太复杂了 我的项目的文件夹结构如下所示: node_modules public models ----> User.js app.js 在User.js中,我有以下代码: var mongoose = require('mongoose'), Schema = mongoose
node_modules
public
models
----> User.js
app.js
在User.js中,我有以下代码:
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
bcrypt = require('bcrypt-nodejs');
var User = function(){
var userSchema = new Schema({
email : {type: mongoose.SchemaTypes.Email,
required: true,
index: { unique: true }
}
});
var userModel = mongoose.Model('User', userSchema);
this.create = function(user_infos){
var newUSer = new userModel({
password:bcrypt.hashSync(data.user_infos.password),
email:data.user_infos.email
});
newUser.save(function(err){
if(err){ //...}
else{
socket.emit('user created', {id:user._id.toString()});
}
});
}
});
module.exports = User;
我的app.js如下所示:
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server),
mongo = require('mongodb'),
mongoose = require('mongoose'),
bcrypt = require('bcrypt-nodejs'),
User = require('./models/User.js'),
Event = require('./models/Event.js')
// ========= CONFIG ================
app.set('port', process.env.PORT || 1337);
app.use(express.static(__dirname + '/public'));
io.set('log level', 1);
//========= ROUTES ================
app.get('/home', function(req,res){
res.sendfile( __dirname + '/index.html');
});
app.get('*', function(req,res){
res.redirect('/home');
});
server.listen(app.get('port'), function() {
console.log("Listening on " + app.get('port'));
});
var MONGOHQ_URL="mongodb://........."
mongoose.connect(MONGOHQ_URL);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
console.log("Connection to the database succes!");
io.sockets.on('connection', function(socket){
console.log('Client connected');
global.socket = socket;
socket.on('try me!', function(data){
User.create(data);
});
});
});
我并不假装这是一种很好的组织方式,但这是我能理解的
当事件在客户端触发时,服务器停止,Chrome Dev Tools打印出:
GET http://localhost:1337/socket.io/1/?t=1397151884883 net::ERR_CONNECTION_REFUSED
有什么想法吗?这是我做这件事的简化版本 app.js
var controllers = require('./controllers');
controllers.io.listen(server, db);
控制器/index.js
var controllers = {
io: require('./ioController')
}
module.exports = controllers;
ioController.js
var socketio = require('socket.io');
module.exports.listen = function(server, db) {
io = socketio.listen(server);
io.on('connection', function(socket) {
// ... do something
});
return io;
}
我是从这里得到的:这是我做这件事的简化版本 app.js
var controllers = require('./controllers');
controllers.io.listen(server, db);
控制器/index.js
var controllers = {
io: require('./ioController')
}
module.exports = controllers;
ioController.js
var socketio = require('socket.io');
module.exports.listen = function(server, db) {
io = socketio.listen(server);
io.on('connection', function(socket) {
// ... do something
});
return io;
}
我从这里了解到:global.socket=socket是以前尝试的结果。。。哪个失败了global.socket=socket来自上一次尝试。。。哪个失败了