我正在编写一个使用 socket.io 的快速应用程序;但是我得到的只是服务器端告诉我我已连接,除此之外,我的套接字都没有工作。如果有人能说出为什么会发生这种情况,那将不胜感激。下面是我的客户端和服务器代码:
客户:
var socket = new io.Socket();
socket.connect('127.0.0.1:3000');
var pageView = new pageViewModel();
pageView.setCurrentPage(pageView.getLogin());
pageView.setNav(pageView.getLogNav());
var tView = new totalViewModel();
socket.on('connection', function () {
ko.applyBindings(pageView);
function loggedIn(e) {
e.preventDefault();
var logged = {
username: document.getElementById('pEmail').value,
password: document.getElementById('pWord').value
};
socket.emit('login', JSONout(logged));
alert(JSONout(logged));
}
function signUp() {
pageView.setCurrentPage(pageView.getRegister());
pageView.setNav(pageView.getRegisterNav());
ko.applyBindings(pageView);
}
socket.on('uploadList', function (data) {
pageView.setCurrentPage(pageView.getIndex());
pageView.setNav(pageView.getIndexNav());
ko.applyBindings(pageView);
tView.setNum(JSONin(data).total);
ko.applyBindings(tView);
});
function logPurchase(e) {
e.preventDefault();
var purchObj = {
price: document.getElementById('pPrice').value,
priceName: document.getElementById('pName').value,
entryDate: new Date()
};
socket.emit('purchaseLog', JSONout(purchObj));
}
function logDeposit(e) {
e.preventDefault();
var depositObj = {
price: document.getElementById('dPrice').value,
entryDate: new Date()
};
socket.emit('depositLog', JSONout(purchObj));
}
function getLogout(e) {
e.preventDefault();
pageView.setCurrentPage(pageView.getLogin());
pageView.setNav(pageView.getLogNav());
ko.applyBindings(pageView);
socket.emit('goLogout', {
none: 'none'
});
}
function getIndex(e) {
e.preventDefault();
pageView.setCurrentPage(pageView.getIndex());
pageView.setNav(pageView.getIndexNav());
ko.applyBindings(pageView);
}
function getMonthly(e) {
e.preventDefault();
pageView.setCurrentPage(pageView.getMonthly());
pageView.setNav(pageView.getMonthlyNav());
ko.applyBindings(pageView);
}
function getYearly(e) {
e.preventDefault();
pageView.setCurrentPage(pageView.getYearly());
pageView.setNav(pageView.getYearlyNav());
ko.applyBindings(pageView);
}
socket.on('wentMonth', function (data) {
tView.setNum(total in JSONin(data));
ko.applyBindings(tView);
});
socket.on('wentYearly', function (data) {
tView.setNum(total in JSONin(data));
ko.applyBindings(tView);
});
function register(e) {
e.preventDefault();
var reg = {
username: document.getElementById('pEmail').value,
password: document.getElementById('pWord').value,
dateJoined: new Date(),
total: 0,
purchase: {},
deposit: {},
monthlyTotal: 0,
yearlyTotal: 0
};
pageView.setCurrentPage(pageView.getIndex());
pageView.setNav(pageView.getIndexNav());
ko.applyBindings(pageView);
socket.emit('registered', JSONout(reg));
}
});
服务器:
var express = require('express');
var app = express();
var mongojs = require('mongojs');
var http = require('http');
var db = mongojs('127.0.0.1:27017/mySpendingDB', ['users']);
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var path = require('path');
app.configure(function () {
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile);
app.use(express.static(path.join(__dirname, 'public')));
});
app.get('/', function (req, res) {
res.render('mainPage.html', {
title: 'app'
});
});
var user = "";
db.users.find(function (err, docs) {
console.log(docs);
return docs;
});
io.sockets.on('connection', function (socket) {
console.log('socket.io started');
socket.on('login', function (data) {
console.log('login');
var checkUser = db.users.find(data, function (err, docs) {
return docs;
});
console.log(checkUser);
if (checkUser !== null) {
console.log('checked user');
user = checkUser.username;
socket.emit('uploadList', checkUser.total);
} else {
console.log('Log in invalid');
}
});
socket.on('purchaseLog', function (data) {
var usercollection = db.users.find({
username: user
});
usercollection.purchase.save(data);
});
socket.on('depositLog', function (data) {
var usercollection = db.users.find({
username: user
});
usercollection.deposit.save(data);
});
socket.on('goMonthly', function (data) {
var monTot = db.users.find({
username: user
}).monthlyTotal;
socket.emit('wentMonthly', monTot);
});
socket.on('goYearly', function (data) {
var yearTot = db.users.find({
username: user
}).yearlyTotal;
socket.emit('wentYearly', yearTot);
});
socket.on('registered', function (data) {
db.users.save(data);
});
});
server.listen(3000);