Kod Panosu

Kopyala, Yapıştır, Hatırla, Kodla..

Tag Archives: express

Express Altında EJS İle .html Uzantılı Dosyaları Template Olarak Kullanmak

Express için varsayılan template engine’i Jade olsa da PHP, ASP veya JSP geçimişi olanların EJS’ye alışması çok daha kolay ve hızlı olur kanaatindeyim. Ancak kullandığınız IDE’nin .ejs uzantısını tanımama ihitmali yüksek. EJS sentaksı genel anlamda HTML’e benzediği için template’lerinizi .html uzantısıyla oluşturursanız IDE ile iyi geçinirsiniz ama böyle yapmaya karar verirseniz aşağıdaki satırı uygulamanıza eklemeyi unutmayın, yoksa tarayıcınızda sayfa sayfa stack trace’leri görürsünüz..

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.engine('html', require('ejs').__express);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Node.JS: Express Session’larını Socket.IO ile Paylaşmak

// Dependencies
var express = require('express')  //express@2.5.11
  , connect = require('express/node_modules/connect')
  , sessionStore = new connect.middleware.session.MemoryStore()
  , io = require('socket.io') // socket.io@0.9.6
  , routes = require('./routes');

var app = module.exports = express.createServer();

// Configuration
app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
  app.use(express.session({ 
      secret: 'your secret here'
    , key:  'express.sid'
    , store: sessionStore
  }));
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes
app.get('/', routes.index);

app.listen(3000, function(){
  console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});

// Sockets
var sio = io.listen(app)

sio.set('authorization', function (data, accept) {
  if (!data.headers.cookie) 
    return accept('No cookie transmitted.', false);
    
  data.cookie = connect.utils.parseCookie(data.headers.cookie);
  data.sessionID = data.cookie['express.sid'];
  data.sessionStore = sessionStore;
  sessionStore.get(data.sessionID, function (err, session) {
    if (err || !session) {
        accept('Error: No such session', false);
    } else {
        data.session = new connect.middleware.session.Session(data, session);
        accept(null, true);
    }
  });
});

sio.sockets.on('connection', function (socket) {
  var hs = socket.handshake;
  var session = hs.session;
  
  console.log('A socket with sessionID ' + hs.sessionID + ' connected!');
  
  var intervalID = setInterval(function () {
    hs.session.reload( function () { 
      hs.session.touch().save();
    });
  }, 60 * 1000);
  
  socket.on('setVal', function(data){
    session.val = data.value;
    session.save();
    console.log('changeVal:' + data.value);
  });
  
  socket.on('getVal', function(){
    console.log('getVal:' + session.val);
    socket.emit('response', session.val)
  });
  
  socket.on('disconnect', function () {
    console.log('A socket with sessionID ' + hs.sessionID + ' disconnected!');
    clearInterval(intervalID);
  });
});
<script>
  var socket = io.connect('/');
  socket.emit('setVal', { value: 'test' });
  socket.emit('getVal');
  socket.on('response', function(data){
    console.log(data);
  })
</script>

Kaynak: http://www.danielbaulig.de/socket-ioexpress