It's also common to share validation code. This allows you to check data client-side and then again once it reaches the server using the same code.
It works pretty good because i can serve out a full page request (good for SEO and fast load times) then boot the same application on the client so subsequent navigation is fast.
Data types - Both concrete classes or helpers for manipulating data.
Input Validation - Do it client-side to do it fast, but double check on the server.
Formatting - Larger web apps often need to format things from dates to users to numbers on client-side generated data without the server hop.
Templates - Many templating systems are compatible with multiple languages, but its easier if there's just one output type.
In saying this, I use node for a heck of a lot at work, but that's mostly because some of the workflows available (streams and events specifically) are perfectly suited to the programs I write in it; not because it lets jQuery monkeys crank out substandard backend code.
That's not entirely true - you can reuse some libraries between client and server-side: underscore's utility functions are the underpinning for many node modules, sizzle and jQuery is great for DOM parsing when writing screen scrapers, etc. There's browserify if you want to run node modules in the browser.