将两个节点服务器的功能与不同的初始设置相结合

时间:2014-12-21 04:19:35

标签: javascript node.js server

我有两个节点服务器,我需要将它们组合在一起,因此一台服务器具有两者的功能。他们的设置有点不同,我不知道如何解决它。

第一台服务器顶部有require语句,中间有路由,底部创建服务器,如下所示:

var express = require('express');
var routes = require('./routes');
etc..

// middleware

// routes

http.createServer(app, function(req, res){
// get files
// check for errors

}).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

第二个看起来像这样:

var express = require('express')
  , app = express()
  , server = app.listen(80)
  , io = require('socket.io').listen(server)
  , fs = require('fs')

var arr= [];

app.get('/aRoute', function(req, res) {
  res.writeHead(200);
  var data = {
    // parse query string
  };
  arr.push(data);

  io.sockets.emit('update', data);
  res.end("OK");
});

app.get('/someOutput', function(req, res) {
  res.writeHead(200);
  res.end(JSON.stringify(footData));
});


io.sockets.on('connection', function (socket) {
});

我剪切了它的粘贴部分,所以现在第一个服务器脚本看起来(大致)像这样。

// All imports
var express = require('express');
var routes = require('./routes');
var mongoose = require('mongoose');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var fs = require('fs');
var multer = require('multer');
var connect = require('connect');
var methodOverride = require('method-override');
var io = require('socket.io');

// middleware

// routes

// trying to make this a route
var arr= [];

app.get('/aRoute', function(req, res) {
  res.writeHead(200);
  var data = {
    // parse query string
  };
  arr.push(data);

  io.sockets.emit('update', data);
  res.end("OK");
});

app.get('/someOutput', function(req, res) {
  res.writeHead(200);
  res.end(JSON.stringify(footData));
});

// THIS GIVES ME ERRORS RIGHT HERE
io.sockets.on('connection', function (socket) {
});

http.createServer(app, function(req, res){
// get files
// check for errors

}).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

合并这两个脚本导致下面列出的错误列在下面的行中。

io.sockets.on('connection', function (socket) {
           ^
TypeError: Cannot call method 'on' of undefined:

// THIS GIVES ME ERRORS RIGHT HERE
io.sockets.on('connection', function (socket) {
});

我不明白为什么在更改两个require语句并移动服务器创建并侦听服务器底部后,我收到此错误。有谁知道我怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

您需要使用.listen方法而不是.on方法的socket.io。致电.listen后,您将获得一个具有您尝试使用的.on方法的对象。

io = require('socket.io').listen(server);

(您还缺少server,这是通过调用express().listen(somePortNumberLike80)

在第二个脚本中创建的

您无法复制和粘贴代码,并希望它能够正常工作。