I'm the author of The Node Beginner Book. Thanks for discussing it here.
Your input is a great help. I see the points WA makes regarding the bad things.
It's true that it's yet another Node tutorial chewing around on the web server / web app stuff; but I think for the people I'm addressing it's still the most useful scenario because it allows to understand how a full fledged app is put together, and is a great example to explain all of the fundamental concepts, new JavaScript ones and conventional ones (because it might makes sense to understand what stuff is done differently and what is done in a known fashion).
So nothing really new here - I hope where this tutorial differs is that it (arguably) might be the first "one-stop" tutorial for Node to get beginners started. Not more not less.
Every other resource I could find forced me to google around to fill the gaps - while this is not a bad thing per se, I think sometimes it's nice to have something that really guides you from A to Z.
Like, for example, http://ruby.railstutorial.org/. If I manage to create something that's only 10% as cool, I'm going to be very happy :-)
Hi there, thanks for this, I've been looking for something self-contained-ish to point friends to when asking about node.
One thing, the site is really messed up in browsers that aren't super wide. My browser is ~1100px wide and the size/positioning of the main content puts it off the right side of the window forcing me to scroll horizontally. I'm not sure why you have stuff like `margin-left: 160px;` in there. It would be a lot better to use `margin: 0 auto;` so people with small screens or unmaximized browsers wont be assaulted :)
Btw, on a positive stylistic note. I love the big container and big text. Too many sites these days have tiny microscopic text -- I couldn't read that stuff if my life depended on it, and my eyes are 20/20! :)
Yeah, I hate that too. The only thing even more evil are sites that present you a tiny font on mobile devices AND don't allow you to zoom.
But saying this, I have to admit while http://nodebeginner.org can be zoomed on the iPhone, the font could still be a bit bigger for my taste (but on the normal site it's ok how it is).
Any idea how to tell CSS that I want an even bigger font on Mobile Safari?
More node resources the better at the moment. A simple CRUD application guide would be very helpful. The java Play! Framework site has a really nice basic blog tutorial which is perfect for understanding the entire process.
I plan on starting my first node app in 6 weeks so please hurry up ;)
Guillermo posted a CRUD with Express + Mongoose a few days ago
https://github.com/guille/mongoose-meetup-04-05/
There's another VERY simple CRUD app somewhere in the Mongoose Google group as a zipfile(yes, this uses Mongoose as well obviously). I can't seem to find it right now, but I think Siegfried Ehret was the original poster. Email me if you'd like me to send it to you.
Also try nodetuts.com. Pedro's stuff helped me when I started learning a few months ago. Some of his stuff might be out-of-date but it will still help you conceptually (and not all of it is by any means). Some out-of-dateness will just be making simple code changes (like upgrading Express).
Well I really enjoyed what I see so far. Partially just from the great links you recommended!
If you do have a CRUD style app I always like being able to download the finished version for when I am stuck (which is often), nothing quite like looking at the entire code to see where I am going wrong.
Shows the very same tutorials over and over and over again. Last week, I tried to get my hands on NodeJS in a reasonable short time. That means, I wanted to write a basic web app with some AJAX in NodeJS having 1 or 2 days to actual learn it and another 3 days to implement the app. As much as I would love to see NodeJS to become more widespread, it's not gonna happen with these sparse amount of information around. It is simply not possible to learn NodeJS from tutorials at the moment, because almost all tutorials deal with a) getting a webserver up and running in 20 lines of code or less or b) uploading a file.
Seriously, either I want to deal with Node.JS to build network apps (then why all the tutorials about building web apps) or I want to use a framework to get my web app up and running in no time. But I really have no interest in writing a webserver and dealing with the routing on my own.
There is Express, but tutorials are outdated or don't cover it in depth. Furthermore, Node.JS is very cumbersome to install, as you need to compile it, compile a packet manager and a thousand other things before it is ready to go (if you want to use it for web development).
As long as people keep repeating the same tutorials over and over again, I don't see Node.JS becoming a popular tool for building web apps in the near future (which is sad, because I do kind of like Node). What I would like to see, is either a tutorial that focuses on building a framework from scratch or one that focuses on the use of an existing framework.
That's useful to see how something is done, but not why or the different options available. For that, there's still a definite lack of a clear guide. The guide on the Express website reads more like an API reference and doesn't go into detail on how to use the different features, which I think would be very helpful.
Right now I'm working on my first application using Express. Over the Summer, when I have free time, I'd like to write a tutorial series for Express and put it up on github so it can be updated as Express evolves. That's really one of the main issues right now, all this stuff is changing so rapidly that a tutorial can become outdated in a few months.
That being said, I agree with most of the issues you raise. Lack of backwards compatibility, rapid changes in APIs and the need to build from source make building webapps in Node more complicated than it needs to be.
We're trying to address this at Akshell (http://www.akshell.com) by making it as easy as possible to get started, providing consistent documentation & core libraries and favoring synchronous I/O.
> That being said, I agree with most of the issues you raise. Lack of backwards compatibility, rapid changes in APIs and need to build from source make building webapps in Node more complicated than it needs to be.
I think Node is on the precipice of being ready for primetime. There is quite obviously a groundswell of interest. I myself was screwing around with it last night trying to get Express, node and Mongoose to work and I couldn't figure it out with the docs I found (99% sure problem is on my end though).
Since there is rapidly growing demand for documentation and examples, the community will work to fill that. I would be surprised if we make it another 6 months without someone really picking up the reins and taking the lead for community documentation. Who knows, maybe someone already has and I just haven't picked up on it yet?
And I think there is a deb package as well.
But, I think I remember someone on the core team recommending to just build from source for now. I have not been doing that and it has been fine though.
This will be an invaluable guide in the future but I think it needs more work. Hello World has been covered everywhere so it's utility as an intro is pointless if you are already a programmer or are familiar with programming.
The guides I find most useful, in addition to references, are the ones that have you build an application from the ground up. So that you start to understand the pros and cons of the language you are trying to learn. I already know how to do Hello World, I already know how to create a node server, what I want is a bit more context, like building a simple messaging server, how to create and use simple frameworks, whats even more appreciated is tutorials and samples about the stuff already built-in.
This is one of the reason why I like working with Apple and Microsoft. They give you tons and tons of sample code that compiles and work. Want access to process information? Here's how. Want to use the camera? Here's how.
It would be great to have a simple CRUD node app that connects to MySQL. That usually gets me 75% of the way there.
I agree, which is why I only very briefly bring up the Hello World stuff (it's a tradition after all :-)), and then state "Ok, this stuff is boring, right? Let's write some real stuff."
And the rest of the tutorial is about building something real and complete (albeit simple). Maybe I should extend the example app a bit, and talk about databases, too.
Oh, and please note, the "book" is only about 35% complete, so there is more to come!
I'm still trying to understand how node actually works. I'm just about to start digging through its source code. It seems most people view node as a magical mystery that they don't understand why it works, just that it does. How is a single threaded app doing things in parallel? Is it like a game loop where it iterates through all its pending operations and gives each a slice of time to progress forward? Are deeper parts of node multi threaded? The callbacks being called serially makes perfect sense, its the parallelness of the actual operations that confuses me.
Yes, it's similar to a game loop, but in Node it's called an event loop. All JavaScript code executes in the main thread, with the event loop (libev) coordinating asynchronous IO APIs, the thread pool, and signal handlers. Node continues executing until there are no more pending operations, then exits.
Most IO in Node doesn't require additional threads; it uses libeio for asynchronous IO on POSIX systems (I believe they're currently working on an abstraction for asynchronous IO in POSIX and Windows).
It does need to use the thread pool for IO operations that only have a blocking API (stat() and friends, legacy database libraries, etc). The blocking API call is executed in a separate thread so the main thread is never blocked on IO.
This is a bit of a (necessary) hack, and ideally all IO could be done using non-blocking APIs.
I too still don't understand 100% what's going on behind the scenes of node/V8 regarding threading/parallelism, but this post here helped me a lot to understand it from a bird's eye perspective:
Node is actually the real name. It is often referred to as node.js just to distinguish it from other concepts and stuff named "Node". If you go on nodejs.org, you'll see that they always refer to it as just "Node" in the About section.
I've asked this already (http://news.ycombinator.com/item?id=2447840) but what books on JS are good for someone who wants to go into development with Node? Most texts that I know of deal with client-side JS. Right now I'm just reading Eloquent Javascript + JavaScript: the Good Parts, but I would like to see if there's any other books that would be good, especially for someone new to closures.
I think newer Javascript books are beginning to add or expand sections on client-side uses and node.js in particular. Two that I know have sections are Test-Driven JavaScript Development[1] and JavaScript: The Definitive Guide, Sixth Ed[2]. The TDD chapter on node is probably already out of date in some respects, the Definitive Guide no doubt will soon be out of date, and both are smaller/smallish. There is also Tom Hughes-Croucher's Up and Running with Node.js[3], which is in progress and available through O'Reilly's open feedback system.
At the moment, blog posts and online tutorials seem to be the way to go, though you have to be careful there too. Node seems to be moving very, very fast, so things will likely require a medium amount of tinkering, even if they were written two weeks ago.
I think what I'd just like is a JS primer that goes through certain features in the language that could be useful for server-side things, including Node. Especially closures.
This was a well-written, easy-to-follow introduction, but I'd gladly pay money for an actual Node book that takes the reader from introduction to mastery.
I'm the author of The Node Beginner Book. Thanks for discussing it here.
Your input is a great help. I see the points WA makes regarding the bad things.
It's true that it's yet another Node tutorial chewing around on the web server / web app stuff; but I think for the people I'm addressing it's still the most useful scenario because it allows to understand how a full fledged app is put together, and is a great example to explain all of the fundamental concepts, new JavaScript ones and conventional ones (because it might makes sense to understand what stuff is done differently and what is done in a known fashion).
So nothing really new here - I hope where this tutorial differs is that it (arguably) might be the first "one-stop" tutorial for Node to get beginners started. Not more not less.
Every other resource I could find forced me to google around to fill the gaps - while this is not a bad thing per se, I think sometimes it's nice to have something that really guides you from A to Z.
Like, for example, http://ruby.railstutorial.org/. If I manage to create something that's only 10% as cool, I'm going to be very happy :-)