我有两个节点服务器,我需要将它们组合在一起,因此一台服务器具有两者的功能。他们的设置有点不同,我不知道如何解决它。
第一台服务器顶部有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语句并移动服务器创建并侦听服务器底部后,我收到此错误。有谁知道我怎么解决这个问题?
答案 0 :(得分:0)
您需要使用.listen
方法而不是.on
方法的socket.io。致电.listen
后,您将获得一个具有您尝试使用的.on
方法的对象。
io = require('socket.io').listen(server);
(您还缺少server
,这是通过调用express().listen(somePortNumberLike80)
您无法复制和粘贴代码,并希望它能够正常工作。