Factsheet
node.js - What does Express.js do in the MEAN stack? - Stack Overflow
Is Express JS still relevant or is there anything new?
What is Node.js' Connect, Express and "middleware"? - Stack Overflow
What is expressJS exactly? i keep hearing nodeJS and express, but I don't know what express is except it's some kinda framework.
Express is a minimalistic web framework built for Node JS.
Without express - you can handle creating a server, handle routing, etc all manually.
Express makes it easier, and also has a lot of other middleware/etc written for it to make common tasks easier such as handling authentication, routing, parsing body/query strings, etc.
For some people - Express is still too 'bare bones' - and lots of other frameworks have popped up to build off of it like Sails JS.
There are alternatives like Koa, HapiJS, Restify, etc that serve similar needs and solve things in different ways.
As for which front end to learn - I'd say pick a few, do a few basic prototypes/proof of concept apps in each one and see what resonates with you the most.
Ember, React, Angular are the main 'big 3' right now - and Angular has a large demand in the job market right now. But there is also demand for Ember and React
BackOne is still heavily used in some places, but I haven't used it much myself outside of some basic prototypes.
IMO - Think of a simple project that's not too complex, but not too simply - I'd say you want something a little more complex than TodoMVC. I built out a 'contact management' app that had a few routes, a list view, a detail view, an edit view - then re-built the same app with a bunch of different frameworks (and even re-built it within the same framework a few times).
I'd say it's worth doing it at least for the most popular ones right now - but might not hurt to do the same for a few of the smaller/up and coming frameworks - Aurelia, Rivets, Vue, etc.
Part of growing up as a developer is actually giving a framework a good 'test run' on a prototype app before deciding to commit to it for the long term, and comparing it to a few other options to do some due diligence instead of just saying 'some guy on the net told me so, so I did'.
More on reddit.comVideos
- MongoDB = database
- Express.js = back-end web framework
- Angular = front-end framework
- Node = back-end platform / web framework
Basically, what Express does is that it enables you to easily create web applications by providing a slightly simpler interface for creating your request endpoints, handling cookies, etc. than vanilla Node. You could drop it out of the equation, but then you'd have to do a lot more work in whipping up your web-application. Node itself could do everything express is doing (express is implemented with node), but express just wraps it up in a nicer package.
I would compare Express to some PHP web framework in the stack you describe, something like slim.
You can think of Express as a utility belt for creating web applications with Node.js. It provides functions for pretty much everything you need to do to build a web server. If you were to write the same functionality with vanilla Node.js, you would have to write significantly more code. Here are a couple examples of what Express does:
- REST routes are made simple with things like
app.get('/user/:id', function(req, res){ /* req.params('id') is avail */ });
- A middleware system that allows you plug in different synchronous functions that do different things with a request or response, ie. authentication or adding properties
app.use(function(req,res,next){ req.timestamp = new Date(); next(); });
- Functions for parsing the body of POST requests
- Cross site scripting prevention tools
- Automatic HTTP header handling
app.get('/', function(req,res){ res.json({object: 'something'}); });
Generally speaking, Sinatra is to Ruby as Express is to Node.js. I know it's not a PHP example, but I don't know much about PHP frameworks.
I have used Express JS few years back and liked the simplicity, but I donโt have any updates regarding whatโs happening for the node ja backend. These days, I am fully into Next.js, leading me to forget the need for Express JS. I am more of a front-end person than a backend one. I would like to know if I choose a framework for the backend, what it should be now ?
[Update: As of its 4.0 release, Express no longer uses Connect. However, Express is still compatible with middleware written for Connect. My original answer is below.]
I'm glad you asked about this, because it's definitely a common point of confusion for folks looking at Node.js. Here's my best shot at explaining it:
Node.js itself offers an http module, whose
createServermethod returns an object that you can use to respond to HTTP requests. That object inherits thehttp.Serverprototype.Connect also offers a
createServermethod, which returns an object that inherits an extended version ofhttp.Server. Connect's extensions are mainly there to make it easy to plug in middleware. That's why Connect describes itself as a "middleware framework," and is often analogized to Ruby's Rack.Express does to Connect what Connect does to the http module: It offers a
createServermethod that extends Connect'sServerprototype. So all of the functionality of Connect is there, plus view rendering and a handy DSL for describing routes. Ruby's Sinatra is a good analogy.Then there are other frameworks that go even further and extend Express! Zappa, for instance, which integrates support for CoffeeScript, server-side jQuery, and testing.
Here's a concrete example of what's meant by "middleware": Out of the box, none of the above serves static files for you. But just throw in connect.static (a middleware that comes with Connect), configured to point to a directory, and your server will provide access to the files in that directory. Note that Express provides Connect's middlewares also; express.static is the same as connect.static. (Both were known as staticProvider until recently.)
My impression is that most "real" Node.js apps are being developed with Express these days; the features it adds are extremely useful, and all of the lower-level functionality is still there if you want it.
The accepted answer is really old (and now wrong). Here's the information (with source) based on the current version of Connect (3.0) / Express (4.0).
What Node.js comes with
http / https createServer which simply takes a callback(req,res) e.g.
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
What connect adds
Middleware is basically any software that sits between your application code and some low level API. Connect extends the built-in HTTP server functionality and adds a plugin framework. The plugins act as middleware and hence connect is a middleware framework
The way it does that is pretty simple (and in fact the code is really short!). As soon as you call var connect = require('connect'); var app = connect(); you get a function app that can:
- Can handle a request and return a response. This is because you basically get this function
- Has a member function
.use(source) to manage plugins (that comes from here because of this simple line of code).
Because of 1.) you can do the following :
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
Combine with 2.) and you get:
var connect = require('connect');
// Create a connect dispatcher
var app = connect()
// register a middleware
.use(function (req, res, next) { next(); });
// Register with http
http.createServer(app)
.listen(3000);
Connect provides a utility function to register itself with http so that you don't need to make the call to http.createServer(app). Its called listen and the code simply creates a new http server, register's connect as the callback and forwards the arguments to http.listen. From source
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
So, you can do:
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
It's still your good old http.createServer with a plugin framework on top.
What ExpressJS adds
ExpressJS and connect are parallel projects. Connect is just a middleware framework, with a nice use function. Express does not depend on Connect (see package.json). However it does the everything that connect does i.e:
- Can be registered with
createServerlike connect since it too is just a function that can take areq/respair (source). - A use function to register middleware.
- A utility
listenfunction to register itself with http
In addition to what connect provides (which express duplicates), it has a bunch of more features. e.g.
- Has view engine support.
- Has top level verbs (get/post etc.) for its router.
- Has application settings support.
The middleware is shared
The use function of ExpressJS and connect is compatible and therefore the middleware is shared. Both are middleware frameworks, express just has more than a simple middleware framework.
Which one should you use?
My opinion: you are informed enough ^based on above^ to make your own choice.
- Use
http.createServerif you are creating something like connect / expressjs from scratch. - Use connect if you are authoring middleware, testing protocols etc. since it is a nice abstraction on top of
http.createServer - Use ExpressJS if you are authoring websites.
Most people should just use ExpressJS.
What's wrong about the accepted answer
These might have been true as some point in time, but wrong now:
that inherits an extended version of http.Server
Wrong. It doesn't extend it and as you have seen ... uses it
Express does to Connect what Connect does to the http module
Express 4.0 doesn't even depend on connect. see the current package.json dependencies section