The (Odd) State of Node.JS and its Frameworks
blog.andrewmunsell.com
blog.andrewmunsell.com
It seems to me that what is missing is a clear winner. Sure, competition from a number of different fronts is really great, but I think what made Java tick for a long time was JBoss and Spring. For Ruby, it is Rails. I'm sure Python has Django and others.
Clearly lots of people are working on it, but a powerhouse framework for NodeJS just hasn't surfaced quite yet. The OP's mention of security being bolted on as an afterthought really is something that makes me shudder. I can't imagine building a large scale public facing system without method level access control. I fear a whole new generation of injection type attacks against NodeJS frameworks.
While it is fun to play with all the shiny new NodeJS toys, I don't see why sticking with tried and true on the backend (take your pick of Python / Ruby / Java) is such a big deal. A lot of the cool features that are being touted in the NodeJS frameworks have been already done elsewhere for much longer.
For me, I've really successfully used NodeJS in one area where it really shines... scraping web pages... but that is simply because working with a jquery-like interface to the DOM, on the server side, is amazing.
In the end, it seems like if you're bootstrapping a company / product (like many of us here are) and trying to pick what to use for your base platform, the obvious choice is building features instead of building frameworks. This means you stick with the tried and true and hope that in the future, the shiny new toys mature a bit more before you go down that path.
Although there are a lot of great frameworks, Express is the 13th most watched repo on GitHub and seems to be what most Node folks use.
Are you including Derby.js and Meteor.js in this? The main example the article uses is the way these frameworks seamlessly sync to your datastore and other clients, and the server is running the same code so you don't have to write almost any boilerplate to do this.
This seems like a unique property of running javascript on server and browser, and I don't know of anything in Python/Ruby/Java that even tries to do this. It seems like it would inevitably be more complicated and require duplication of code. Unless you had a framework that compiled your model and view code from one of these languages to or from javascript (which I've always thought would be cool but now seems like a worse solution than Meteor or Derby)
I know people that have had issues with socket.io and skipped it (and node.js) for their production needs. That said, my aha, gotta be careful, moment was when I was setting up a quick test, picked one of the http-digest auth modules, and had a bug -- actually a completely incorrect digest auth implementation (basic auth was fine). This was the second node.js module implementing digest auth that I used that had a bug that relatively simple testing would have found. (The other bug was around the caching/lifecycle of nonces.)
I plan on going back and submitting patches for both of these modules, but the lack of basic testing in two cases of a well known (and documented) feature reminded me that the platform is still in transition. (This is just one example of some issues I've run into)
Why I say you have to be careful? For the downsides, there are definite upsides. I needed a simple test https server w/ a rest API and serving a static file -- total lines of code, about 25. A great boon to prototyping.
Like any new framework, evaluate it in consideration with your needs.
I love JavaScript (in the weird way everyone who "loves" JS, loves JS), but I'm skeptical the next big web framework will be written in it. I want to believe, but it just doesn't feel right yet. I hope it will and I can't wait for the "ah ha" that makes it feel right. But it doesn't yet.
I feel like Meteor is completely missing the point when they do things like use fibers. To be the go-to Node framework, it's going to have to move much more client-side, but still make it easier to build an app than something like Restify.
It just 2-3 years old and it does amazing work. I don't wanna talk about frameworks(noders hate frameworks) and modules.
Node's API is changing but everyone is happy with that.
Why I love Node is because, It's JavaScript and the evented model.
Some times back I do not agree with the moves done by Ryan (Node Creator). But Now Node Core team is lead by isaacs who is a cool guy and listen to the community.
Node Frameworks may be in Odd state. But not the Node itself.
Express + Socket.io gives you realtime.
Example of the two of them working together: https://github.com/mcantelon/chatrooms/blob/master/app.js
And while you could use Meteor (or, I'm sure, Derby) for a static website, that's obviously not what it's designed for. I've never tried it, though. I'm sure it would be a real beautiful experience.
Another that shows promise is Flatiron.js [2], but I haven't had a chance to play with it yet.
[1] https://github.com/jaredhanson/locomotive [2] https://github.com/flatiron
Not so much of a framework than a way of keeping code organized and disabling/enabling different parts of an app as needed.
It does come with a MVC example, but you can of course also use one of the well known frameworks like Backbone, Spine, Knockout etc.
Idea here is lightweight and a solid foundation that allows broad usage.