Spathon

Koa.js and Socket.io

I have been working with a project in Koa.js that is a small framework for node.js and yesterday I wanted to add Socket.io to it but run in to some problems. I couldn’t figure out how to use socket.io with Koa.js and after a lot of googling I found some Japanese project on github that solved my problem.

My problem was that I wanted to get koa-router, koa-views, jade and everything working but I didn’t get everything to work together. It turned out to be a quite simple solution to my problem, all I had to do was initialize socket.io after the last app.use().

Here is an example with Koa.js, koa-(router, views, static), jade and socket.io:

var app = require('koa')(),
    router = require('koa-router'),
    serve = require('koa-static'),
    views = require('koa-views');

// Send static files
app.use(serve('./public'));

// Use jade
app.use(views(__dirname +'/views', 'jade', {}));

// Router
app.use(router(app));

// This must come after last app.use()
var server = require('http').Server(app.callback()),
    io = require('socket.io')(server);

/**
 * Routes can go both before and after but
 * app.use(router(app)); must be before
 */
app.get('/', function *(next) {
  yield this.render('index', { my: 'data' });
});

// Socket.io
io.on('connection', function(socket){
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

// Start the server
server.listen(1337);
console.info('Now running on localhost:1337');

I hope this article could be to any help.

1/4 av #Blogg100 avklarad

Jag har med detta inlägg skrivit sammanlagt 25 blogginlägg på spathon.com och patrikspathon.com under 25 dagars tid. Det har på sätt och vis varit lättare än jag trott men börjar bli svårare då det känns som det börjar bli mindre att komma på att skriva om på patrikspathon.com som är min privata blogg om livet.

#Blogg100 utmaningen har fått mig att göra mer för att få något att skriva om + ta mer bilder i vardagen så jag kan lägga upp. Jag har återupptagit ett litet projekt jag påbörjade för länge sedan så jag har kunnat lära mig mer om node.js och allt omkring för att få något att blogga om. (Mer om projektet kommer i senare inlägg). Utmaningen har även fått mig att våga skriva mer utan att gå igenom det för mycket och kunna skriva om saker som jag annars inte skulle skriva om då jag inte tyckt att det borde vara intressant för någon. Mycket jag skriver är mest för mig själv för att kunna gå tillbaka speciellt på min personliga blog men också för att lära mig  mer då jag kollar upp mer innan jag skriver om någon teknik.

Nu är det bara 75% kvar och jag tror jag kommer hålla igång bloggandet i framtiden tack vare #Blogg100, jag rekommenderar dig att anta utmaningen.

Stylus en CSS-preprocessor

I de flesta node.js projekt jag jobbat med så brukar jag oftas kra med Stylus då Express.js har stöd för den vid generation av nytt projekt. I Stylus krävs mycket färre tecken då varken :, ; eller {} används, allt bygger på rätt indentation och man kan även nästla selectors på samma sätt som SCSS & LESS tex:

/* CSS */
body {
  background: red;
  font-size: 45px;
}
.thing {
  color: green;
}
.thing p {
  margin: 0 0 10px;
}

/* Stylus */
body
  background red
  font-size 45px

.thing
  color green
  p
    margin 0 0 10px

För att använda stylus i ditt node.js (Express.js, Koa.js) projekt inkludera stylus i package.json och sedan i app filen:

var koa = require('koa'),
    app = koa(),
    stylus = require('koa-stylus'),
    serve = require('koa-static');

// Place where the .styl are
app.use(stylus('./public'));
// Send static files
app.use(serve('./public'));
// more code ...

I Koa behöver du även använda middleware för att leverera statiska filer, “koa-static” i detta fall och här använder jag mig även av koa-stylus.

Stylus är fortfarande ungt och inte fullt lika adopterat som SCSS eller LESS men det funkar enkelt och smidigt att få igång med node.js projekt och jag föredrar det framför LESS. Så till nästa projekt ge det ett försök.

Koa.js ett litet framework för Node.js från skaparna av Express.js

Jag har börjat testa Koa som ska vara ett litet och robust ramverk för node.js från skaparna av Express.js. Koa har inga middleware till skillnad från Express.js utan man får själv inkludera dom man vill ha.  Koa använder sig av generators så man slipper alla callbacks och promises, vilket binder samman det bästa av async och sync kod. Koa kräver dock minst node.js 0.11.9 (kan rekommendera nvm för att hantera olika versioner av node.js) men även att man sätter flaggan --harmony. Det är lätt att sätta upp en server (exempel från koa.js github):

var koa = require('koa');
var app = koa();

// logger
app.use(function *(next){
  var start = new Date;
  yield next;
  var ms = new Date - start;
  console.log('%s %s - %s', this.method, this.url, ms);
});

// response
app.use(function *(){
  this.body = 'Hello World';
});

app.listen(3000);

Vad logger gör är att den tar aktuellt datum sedan kör yield funktionen next vilket går och kör nästa funktioner i anropet dvs sätter “Hello World” på body. Var av det är klart kör vidare och räknar ut nu – start och loggar. Fördelen med detta är att du kan tilldela variabler yield och t.ex. databas anrop och vänta tills de 2 async funktionerna är klara innan man returnerar svaret. Koa är ganska ungt då det kom i början av året eller precis innan så händer det mycket. Jag lekte lite för över en månad sedan och har fått skriva om en del p.g.a alla förändringar men jag gillar det skarpt. Jag ska försöka skriva fler blog inlägg om problem och  tips jag stöter på. För att läsa mer:

next generation web framework for node.js

Sida 6 av 10« Första...45678...Sista »