组合具有不同初始设置的两个节点服务器的功能

combining functionality of two Node servers with different initial set up

本文关键字:两个 节点 功能 服务器 组合 设置      更新时间:2023-09-26

我有两个节点服务器,我需要将它们组合在一起,以便一台服务器具有两者的功能。它们的设置略有不同,我不确定如何解决。

第一个服务器在

顶部有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语句并将服务器创建和侦听服务器底部后出现此错误。有谁知道我该如何解决这个问题?

您需要 socket.io,它具有.listen方法,而不是.on方法。调用 .listen 后,您将返回一个具有您尝试使用.on方法的对象。

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

(您还缺少server,这是在第二个脚本中通过调用express().listen(somePortNumberLike80)创建的

您不能只是复制和粘贴代码并期望它工作,真的。