67 comments

[ 5.0 ms ] story [ 151 ms ] thread
Express has been at the core of everything we have done, a great little framework. Going forward though its worth keeping an eye on http://koajs.com, like express it is built by visionmedia/tj but uses the new generators that are starting to become available in node.
Using "this" to generate response might cause lot of confusion.
Thinking of "this" as simply the app's context helped me make sense of that.
(comment deleted)
(comment deleted)
The changes make express even cleaner than before. The new routing system, allowing handling different verbs with chained functions, is pretty slick.

Also, decoupling default middleware and putting them into their own modules seems like the way to go, and more 'node-y' than packing everything together.

I'll be glad to get rid of the connect warnings too !

Although there's koajs, it's nice to see express is still getting some love

I love you Express, but my next project is going to be based on TJ's own Express successor: http://koajs.com/
That's not a successor, it's a different framework based on generators. It's not as if it was Express 5.x or something.
From the Koa homepage:

> Koa is a new web framework designed by the team behind Express, which aims to be a smaller, more expressive, and more robust foundation

I think he meant successor in the spiritual sense, which is undeniably true.

It's going to be an even bigger hit than express, for sure.
I've been playing with 'Co', the thunk / flow control framework TJ uses for Koa:

    #!/usr/bin/env node --harmony
    var fs = require('fs'),
      co = require('co'),
      thunkify = require('thunkify'),
      request = require('request'),
      readFile = thunkify(fs.readFile);
      get = thunkify(request.get);

    var log = console.log.bind(console);

    // Create a thunk, and run it immediately.
    co(function *(){
      try {
        var fileContents = yield readFile('myfile', 'utf8');
        log(fileContents);
        var yahoo = (yield get('http://yahoo.com'))[0];
        log(yahoo.statusCode)
      } catch(error) {
        log('Oh no, an error!')
        log(error.code)
      }
    })()
Async, inline, catching errors. It's nice.
It is nightmare for v8 jit.
it's a nightmare for crankshaft.
Yes, you are right. I forgot how they call own optimizer. (i wanted to point that people do not repeat blindly that peace of code)
Yeah, once you start using yield it's really hard to write JS without it. It's nice to get that keyword back.

You can start throwing that on mocha too, it's pretty sweet.

Don't forget to switch when next framework arrives. You don't want to be one of those unpopular geek losers, right?
Yeah you'd rather want to be the aggressive inpertinent kind.
Yes because we should never switch to something we think is better right? I mean advances who needs or wants that?
No, but so far I've been using koa, it's really worth making the switch.
Koa, if anything, will actually replace connect[1], which is the middleware layer that express is built on top of.

And yes, TJ built that too.

[1]: https://github.com/senchalabs/connect

EDIT: Looks like Express doesn't use Connect anymore. I'm out of the loop.

Yeah, also, Koa has a lot of express sugar baked-in, express turned into sugar on top of connect, then left connect behind and so on that koa is actually really removed from connect.
I love the new Router design, but I mainly use Restify[1] to build REST APIs for SPAs. How easy would it be to use port Express's new Router to Restify?

[1] https://github.com/mcavage/node-restify

Why do you primarily use that as opposed to building in express?
Maybe i'm missing something, but restify seems to have an identical API to express
(comment deleted)
I had a play with express/node a whole back but found it quite low level (useful in some cases). Is there anything closer to rails in node or is there a preference for piecing everything together with libraries?
The node.js community seems very unixy, small modules pieced together is the name of the game.
As Jahansafd said, Sails.js is probably the most popular right now. It's a full MVC framework built on top of Express. It's constantly being improved, there's commits nearly every day.
Does anyone know where I can find discussion about the Express team's decision to completely detach from connect? I'm also curious about what type of middleware design they went with, or if they just reimplemented connect in their own way, which wouldn't surprise me due to the prevalence of Not Invented Here syndrome in the Node community.
From the migrating guide: "This change was made to allow for these [connect] middleware to receive fixes, updates, and releases without impacting express release cycles and vice versa."
Couldn't they still achieve that by depending on connect, but not depending on those specific connect middlewares?
TJ's one of the original creators of Connect, so it's unlikely to simply be NIH.
connect is basically just a `.use()` kernel, and express' router was just mounted on this kernal. now, express' kernel combines connect's `.use()` kernel as well as the router, simplifying the entire middleware system internally and removing the need to do `app.use(app.router)`.

i.e. you're no longer mounting the router on top of another kernel.

The latest commit message on (the now completely seperate) body-parser module is "asdf". Makes me nervous.
Bad commit messages are a big warning sign to me too.
Bad commit messages are a big warning sign to me too.
Bad commit messages are a big warning sign to me too.
That was the FIRST commit to that repo. Not that it's great reasoning, but really how much info does 'Initial commit.' convey as opposed to 'asdf'?
For a start it would have stopped me mistaking the first commit for the last commit. More importantly, where you see the commit message next to lines of code[1], "initial commit" hints that you can assume the line came with an import or boilerplate.

1. https://github.com/expressjs/body-parser/blame/master/index....

Go take a look through TJ's Github credentials. I don't know who made that commit, but TJ has this well handled I'm sure.
I would argue that TJ's Github credentials don't necessarily make the best argument for his long term project. The guy is brilliant and prolific, but he admits to not being the best at long-term maintenance.

For instance, his response to the whole n rm -rf debacle: "yeah it's kinda tough when you have 250+ OSS projects, inevitably some get messed up over time and I merge broken shit haha". That being said, it looks like he's let other folks take over Express (who are all qualified). He didn't even know the logger was named "Morgan" until he read it in a blog post about Express 4.

Partly unrelated but i have read strong evidence[1] suggesting that the ExpressJS author (TJ) does not even exist as a real person and is an entirely constructed online identity who is portrayed by different people. Not that it matters too much though, still interesting ;)

[1] http://www.quora.com/TJ-Holowaychuk-1/How-is-TJ-Holowaychuk-...

I met him once at a Node.JS bar/podcast talk about 2 years ago. He looks just like his Twitter picture. Could still be the figure head of a bunch of people I guess.
lol TJ is real and too smart for his own good;)
So productive... never posts on Hacker News... Hmmm...
Another complete web framework in NodeJS world.

http://www.partialjs.com/

Its a bit high level than Express but same performance wise. I like it becoz you get started in 2 minutes.

Any particular reason to choose Express over Koa?
not really. use koa instead if you can. a lot of middleware hasn't been written for koa yet, so you might have to write your own.