使服务器模块在node.js中重用

时间:2014-12-18 15:04:56

标签: javascript html node.js socket.io

我正在尝试将以下代码(套接字模块和io函数除外)放入单独的js文件中以供重用。

index.js

var express = require('express'), 
app = express(), 
http = require('http').createServer(app), 
url = require('url'),
cookieParser = require('cookie-parser'),
io = require("socket.io").listen(http),  // question with this line

app.use(cookieParser());
app.get('/p/:tagId', function(req, res){
  key = req.cookies["phpsession"];
  var filename = req.param("tagId");
  res.sendfile(filename+'.html');
});

io.on('connection', function(socket){

//..Other code....//

});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

这是我尝试遵循此guide

server.js

var express = require('express'), 
app = express(), 
http = require('http').createServer(app), 
url = require('url'),
cookieParser = require('cookie-parser'),

module.exports = {
 express_app : function(){

  app.use(cookieParser());
  app.get('/p/:tagId', function(req, res){
   key = req.cookies["phpsession"];
   var filename = req.param("tagId");
   res.sendfile(compare+filename+'.html');
  });
 },

 server_http: function(port){
  http.listen(port, function(){
   console.log('listening on *:'+port);
  });
 }
}

index.js

  var server = require('./server');
  server.express_app();
  server.server_http(3000);
  var io = require("socket.io").listen(server.server_http(3000));
  io.on('connection', function(socket){......

这是创建和导出模块的适当方法吗?我不确定新的index.js中的这一行:

  server.server_http(3000);
  var io = require("socket.io").listen(server.server_http(3000));

好像我正在调用http.listen两次,一旦我运行服务器,console.log就会给我重复的listening on *:3000。你能给我一些关于如何更改服务器的建议。 JS。

1 个答案:

答案 0 :(得分:1)

请尝试使用socket.io问题。

在Server.js中:

server_http: function(port, callback){
  http.listen(port, function(){
   callback(this); // this = server instance
   console.log('listening on *:'+port);
  });
}

index.js:

server.server_http(3000, function (server) {
  var io = require("socket.io").listen(server);
  io.on('connection', function(socket){......
});