1

我有一个使用 socket.io 的快速应用程序。我不清楚客户首先需要什么,所以如果有人能告诉我如何做到这一点,我将不胜感激。此外,我不确定我的客户端代码是否正确。这是我的客户端套接字代码:

var socket = io.connect('http://localhost:3000');
    var tView = new totalViewModel();
    socket.on('connect', function (data) {
    function loggedIn(e) {
        e.preventDefault();
        var logged = {
            username: document.getElementById('pEmail'),
            password: document.getElementById('pWord')
         };
         socket.emit('login', JSONout(logged));
    }
    socket.on('uploadList', function (data) {
         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();
        socket.emit('goLogout', {
             none: 'none'
        });
    }

    function getIndex(e) {
        e.preventDefault();
        socket.emit('goIndex', {
            none: 'none'
        });
    }

    function getMonthly(e) {
         e.preventDefault();
         socket.emit('goMonthly', {
             none: 'none'
         });
    }

    function getYearly(e) {
        e.preventDefault();
        socket.emit('goYearly', {
            none: 'none'
        });
    }
    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
         };
         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('login.html', {title: 'Login'});
});
app.get('/index', function (req, res) {
   res.render('index.html', {title: 'Daily'});
});
app.get('/monthly', function (req, res) {
   res.render('monthly.html', {title: 'Monthly'});
});
app.get('/yearly', function (req, res) {
   res.render('yearly.html', {title: 'Login'});
});
app.get('/register', function (req, res) {
   res.render('register.html', {tittle: 'Register'});
});
app.get('/logout', function (req, res) {
   req.logout();
   res.redirect('/');
});

var user="";

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);
        console.log(checkUser);
        if(checkUser !== null) {
            console.log('checked user');
            user=checkUser.username;
            app.get('/index', function(req, res) {
                res.direct('/index');
            });
            socket.emit('uploadList', checkUser.total);
        }
    });
    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('goLogout', function(data){
        app.get('/logout', function (req, res) {
            req.logout();
            res.redirect('/');
        });
    });
    socket.on('goIndex', function(data){
        app.get('/index', function (req, res) {
            res.redirect('/index');
        });
    });
    socket.on('goMonthly', function(data){
        app.get('/monthly', function (req, res) {
            res.redirect('/monthly');
        });
        var monTot = db.users.find({username: user}).monthlyTotal;
        socket.emit('wentMonthly', monTot);
    });
    socket.on('goYearly', function(data){
        app.get('/index', function (req, res) {
            res.redirect('/index');
        });
        var yearTot = db.users.find({username: user}).yearlyTotal;
        socket.emit('wentYearly', yearTot);
    });
    socket.on('registered', function(data){
        db.users.save(data);
        app.get('/index', function (req, res) {
            res.redirect('/index');
        });
    });
});

server.listen(3000);
4

1 回答 1

3

在客户端上,您可能忘记添加 socket.io 库:

<script src="http://localhost:3000/socket.io/socket.io.js"></script>

在服务器上它应该可以工作(您正确定义了 io)。

于 2013-08-25T23:16:44.307 回答