Kod Panosu

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

Category Archives: Node.JS

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: NPM ile Kurduğunuz Modülleri package.json Dosyasına Kaydettirmek

Node.JS projenize NPM kullanarak dahil etmek istediğiniz modülleri

npm install <moduladi> --save

veya

npm install <moduladi> -S

şeklinde kurarsanız kurduğunuz modüller package.json dosyasındaki dependencies bölümüne kaydolur.

Böylece node_modules klasörünü hariç tutup sadece projenize ait olan kodu başka bir kaynağa taşımanız durumuna sadece

npm install

komutuyla projenizde kullandığınız tüm modülleri tek seferde çekmiş olursunuz.

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

Ubuntu: NodeJS’yi Kurarken OpenSSL Bulunamadı Hatası

Ubuntu üzerinde NodeJS’yi kurarken ilk aşamada çalıştırdığınız

./configure

komutu eğer size OpenSSL’i bulamadığını söylüyorsa ilgili paketleri sisteminize kurmak için aşağıdaki komutu yönetici olarak (sudo ile) çalıştırın.

apt-get install libssl-dev openssl

CloudFoundry Caldecott: Bağlantı Hatası Çözümü

CloudFoundry’nin bulut servislerine erişmek için tünel olarak Caldecott adlı uygulamayı kullanıyor ama “Ruby Interpereter..” hatası alıyorsanız Ruby v.1.9.3-p0‘ı kurmalısınız.

Denenmiş bir çözümdür.

Update: Windows üzerinde Caldecott’u kurarken (gem install caldecott) “ERROR: Failed to build gem native extension” şeklinde bir hata alıyorsanız DevKit-tdm-32-4.5.2‘yi sisteminize kurun. Arşivi açtığınız yerde komut satırını açıp sırasıyla “ruby dk.rb init” ve “ruby dk.rb install” komutlarını çalıştırın. Caldecott artık sorunsuz bir şekilde kurulacaktır.

Ücretsiz ve Online Node.JS IDE’si: Cloud9

Cloud9 IDE (http://c9.io/) Node.JS ile kod geliştirmek isteyenler için inanılmaz bir editör!

  • Github ve Bitbutcket hesabınızla entegre çalışabiliyor,
  • NPM kullanmanıza izin veriyor,
  • Visual Studio’dan alışık olduğumuz kod tamamlama özelliğini barındırıyor,
  • kodunuzu bulut hostalarınıza direkt olarak deploy edebiliyor
  • ve en önemlisi Node.JS uygulamanızı debug edebilme imkânı sağlıyor.

Node.JS’ye merakı olan herkesin bir şans vermesi lâzım.

Ücretsiz MongoDB Sunucusu – MongoHQ

Ücretsiz ve kullanışlı bir mongodb host arayanlara MongoHQ‘yu şiddetle tavsiye ediyorum. Ücretsiz hesap ile 64MB alan ve birden fazla database/kullanıcı (yetkili/yetkisiz) oluşturma seçenekleri sunuluyor. MongoDB’ye merhaba demek için çok iyi bir fırsat.

Node.JS İle Yazdığımız Sunucuyu Kodlar Değiştiğinde Otomatik Yenileme

Node.JS ile yazdığımız ör. http server, tcp server gibi sunucular kaynak kodunda değişiklik yaptığımız takdirde yeniden başlatılmalıdır. Ancak nodemon adlı modül sayesinde sunucumuzu kaynak kodu değiştiğinde otomatik olarak yeniden başlatabiliriz. Bu da development aşamasında büyük kolaylık sağlar

Nodemon’u NPM aracılığıyla “global” seçeneğiyle kuruyoruz ki nodemon projemize dahil olmasın:

npm install nodemon -g

Nodemon’a uygulamamızı başlatmasını söylüyoruz. Örnek:

nodemon ./server.js localhost 8080

Nodemon artık projemizi ilgilendiren dosyalardaki değişikliği otomaik olarak takip edecek ve değişiklikleri tespit ettiğinden uygulamamızı yeniden başlatacak.

NPM’i Kullanmadan Node.JS Modülleri Kurma

NPM çalışmıyorsa yüklenmesi gereken modüller için:

  1. NODE_PATH adlı bir ortam değişkeni oluşturup değer olarak “C:\Program Files\nodejs\node_modules” veriyoruz.
  2. http://registry.npmjs.org/%5Bmodul_adi%5D adresine gidiyoruz. Ör: http://registry.npmjs.org/express
  3. Sayfanın en altında modül yazarının github adresinden modülü indiriyoruz.
  4. Bulamazsak en güncel versiyon numaralı tarball’u (*.tgz) indiriyoruz.
  5. Arşivi C:\Program Files\nodejs\node_modules adresine açıp klasörün adını modülün adına çeviriyoruz.

NPM’in Registry URL’ini Değiştirme

npm config set registry "http://registry.npmjs.org/"

Bu komut sayesinde normalde https://registry.npmjs.org/ olan nmp registry adresini http’ye çevirerek sertifika sorunlarından kurtulabilirsiniz.