Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why combine http module with express module

Tags:

node.js

Hello guys i'm new to node js and started researching and working on some tutorials. I just want a better understanding or clarification on a doubt i had. So i came across the in built module http. This helps in creating a a basic web server. Now express module is a web framework that is built on top the http module that makes it easy using a fully wedged web server without reinventing the wheel. Now I came across this code:

var express = require( 'express' )
, http = require("http")
http.createServer( options, function(req,res)
{
  app.handle( req, res );
 } ).listen(8080);

But in express one could simply just do this

 var express = require('express');
 var app = express();
 app.listen(8080, function() {
  console.log('Listening on ' + 8080);});

What's the difference between both? Don't they both accomplish the same thing. If not what's the difference and advantage of using the first approach. Should one adhere to the first approach as it's a good programming practice. That's my doubt as i just want a clear understanding if there's any difference.

like image 227
EI-01 Avatar asked Mar 26 '16 19:03

EI-01


People also ask

What is the difference between HTTP Module and Express module?

HTTP is an independent module. Express is made on top of the HTTP module. HTTP module provides various tools (functions) to do things for networking like making a server, client, etc. Express along with what HTTP does provide many more functions in order to make development easy.

Why should you separate Express APP and server?

Applying a similar concept to the project structuring of Express, the separation of the application logic from the server allows the code to be modular and follow a MVC (Model-View-Controller) model. The separation is essential to reduce coupling and to encapsulate and abstract the inside logic of application.

Does Express need HTTP?

There's really no reason to create your own http server using the http module. Express will just do that for you with app. listen() just fine and save you little bit of typing. If you were creating an https server, then you would need to use the https module and pass security credentials to https.

Why should I use Express?

Web applications are web apps that you can run on a web browser. Since Express. js only requires javascript, it becomes easier for programmers and developers to build web applications and API without any effort.


1 Answers

Why combine http module with express module

There's really no reason to create your own http server using the http module. Express will just do that for you with app.listen() just fine and save you little bit of typing.

If you were creating an https server, then you would need to use the https module and pass security credentials to https.createServer(...) in order to create a properly configured server. Express does not have the ability to create a properly configured https server for you automatically.


If you look at the Express code in GitHub for app.listen(), it shows this:

app.listen = function listen() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

So, there's really no difference (other than a little less typing) when you use app.listen() or create your own http server and then use app as the listener to that server.


So, these two code snippets are identical in function:

var app = require('express')();
app.listen(8080);

app.get('/', function(req, res) {
    res.send("hello");       
});

The above code is functionally identical to:

var http = require('http');
var app = require('express')();
http.createServer(app).listen(8080);

app.get('/', function(req, res) {
    res.send("hello");       
});

Of course, if you're trying to set up https servers or add custom options to the .createServer() method, then you will set up your own server first and then pass app to it as the listener. app.listen(...) is just a shortcut when the default http.createServer() works fine.

like image 98
jfriend00 Avatar answered Oct 15 '22 20:10

jfriend00