Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
ExpressJS 4.0 has been released (expressjs.com)
169 points by tbassetto on April 11, 2014 | hide | past | favorite | 62 comments


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.


TJ is working for Segment.IO: https://segment.io/team


So productive... never posts on Hacker News... Hmmm...


Is he also Satoshi Nakamoto?


lol TJ is real and too smart for his own good;)


And here are the new features in Express 4.x: https://github.com/visionmedia/express/wiki/New-features-in-...


I love you Express, but my next project is going to be based on TJ's own Express successor: http://koajs.com/


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.


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.


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.


It is nightmare for v8 jit.


Who needs JIT on I/O bound tasks?


Any links for that?


v8 does not optimize blocks inside try catch (not too fresh http://www.html5rocks.com/en/tutorials/speed/v8/) and about generators and optimizations (http://wingolog.org/archives/2013/06/11/ecmascript-generator...)


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)


I have been looking/thinking for the best way to implement something like the new Router functionality for 3 days now.

This is very good news for me.

Also, how to migrate guide can be found here: https://github.com/visionmedia/express/wiki/Migrating%20from...


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.


The latest commit message on (the now completely seperate) body-parser module is "asdf". Makes me nervous.


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....


If you clicked on the 86446f74

You would have gotten: https://github.com/expressjs/body-parser/commit/86446f74d5c6...

Which shows parents 0


Bad commit messages are a big warning sign to me too.


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.


If you're also wondering about what the changes were for 4.0 https://github.com/visionmedia/express/blob/master/History.m...


Most of the middlewares (like logger) are no longer bundled with Express and must be installed separately.

https://github.com/senchalabs/connect#middleware



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?


take a look into Sail.js, Meteor.js or the MEAN stack

http://sailsjs.org/#! https://www.meteor.com/ http://www.mean.io/#!/


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.


The node.js community seems very unixy, small modules pieced together is the name of the game.




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


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?


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.


TJ's one of the original creators of Connect, so it's unlikely to simply be NIH.


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


One thing express doesn't do is manage URLs for you. I wrote a simple module that does this[0]. It helps, especially when you have a large number of URLS.

[0] https://github.com/artnez/urltree


Very cool. Interestingly enough, a lot of Express features are starting to align with Bogart (https://github.com/nrstott/bogart) features, and vice versa unintentionally.


I really like this new http://expressjs.com/4x/api.html#router feature.

This will help me build better architecture for application on top of express


Hapi.js to everyone http://spumko.github.io/


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.


finally i am really excited




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: