为什么我的express.js不会运行?

时间:2013-08-23 02:49:19

标签: javascript node.js express socket.io mongojs

我有一个express.js应用程序可以实现:

node app.js
info  - socket.io started

它不会再进一步​​,如果有人能解释为什么会发生这种情况以及如何解决它,我们将不胜感激。我相信错误发生在我的app.js中,发布在这里:

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('/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) {
    var checkUser = db.users.find(data);
    if (checkUser !== null) {
      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');
    });
  });
});
app.listen(3000);

1 个答案:

答案 0 :(得分:3)

您应该使用server.listen(port)代替app.listen(port)。使用app.listen()只会启动Express应用程序,同时您还希望socket.io正在搭载的HTTP服务器启动。