Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 191 Vote(s) - 3.52 Average
  • 1
  • 2
  • 3
  • 4
  • 5
var express = require('express'); var app = express(), What is express()?? is it a method or a constructor? Where does it come from

#1
var express = require('express');
var app = express();
This is how we create an express application. But what is this 'express()'? Is it a method or a constructor? Where does it come from??
Reply

#2
You’ll use Node’s require function to use the express module. require is similar to keywords like import or include in other languages. require takes the name of a package as a string argument and returns a package. There’s nothing special about the object that’s returned—it’s often an object, but it could be a function or a string or a number.


var express = require('express');


=> Requires the Express module just as you require other modules and and puts it in a variable.

var app = express();

=> Calls the express function "express()" and puts new Express application inside the app variable (to start a new Express application).
It's something like you are creating an object of a class. Where "express()" is just like class and app is it's newly created object.

By looking the code of express below you are good to go what is really happening inside.

File 1: index.js

'use strict';

module.exports = require('./lib/express');

File 2 : lib/express.js

'use strict';

var EventEmitter = require('events').EventEmitter;
var mixin = require('merge-descriptors');
var proto = require('./application');
var Route = require('./router/route');
var Router = require('./router');
var req = require('./request');
var res = require('./response');

/**
* Expose `createApplication()`.
*/

exports = module.exports = createApplication;

function createApplication() {
var app = function(req, res, next) {
app.handle(req, res, next);
};

mixin(app, EventEmitter.prototype, false);
mixin(app, proto, false);

app.request = { __proto__: req, app: app };
app.response = { __proto__: res, app: app };
app.init();
return app;
}
exports.application = proto;
exports.request = req;
exports.response = res;
exports.Route = Route;
exports.Router = Router;
});


**How require works**

*When you call require('some_module') in node here is what happens:*

1. if a file called some_module.js exists in the current folder node will load that, otherwise:

2. Node looks in the current folder for a node_modules folder with a some_module folder in it.

3. If it doesn't find it, it will go up one folder and repeat step 2

This cycle repeats until node reaches the root folder of the filesystem, at which point it will then check any global module folders (e.g. /usr/local/node_modules on Mac OS) and if it still doesn't find some_module it will throw an exception.

Reply

#3
Ancient post. I think the original poster was confused about why the syntax to call the function exported by module express is

var app = express()

instead of

var app = express.express()

To clarify: require() function does not create a reference to that 'module'. There's no such thing as reference to a module. There's only reference to thing(s) exported by a module.

require('xxx.js'), where the .js extension can be omitted, returns whatever is exported by that xxx.js file. If that xxx.js file exports an object, require('xxx.js') returns an object; if a function is exported, require('xxx.js') returns a function; if a single string is exported, require('xxx.js') returns a string...

If you check source code of file express.js, you will see that it exports a single function. So in

var express = require('express')

The first express is assigned whatever is exported by module express, which in this case happens to be a single function. express is a function, not a reference to a module. Hence on second row you just invoke that function:

var app = express()

Hope this helps!
Reply

#4
let me answer this question by an example.
create 2 javascript files.
play1.js and express.js

//express.js
function createApplication(){
var app = 'app';
return app;
}
module.exports = createApplication;
//keep in mind that we are not doing module.exports = {createApplication}


now import express.js in play1.js file

//play1.js
var express = require('./express);
var app = express();
// this will call createApplication function as app is referencing to it.
console.log(app); // "app"


Reply

#5
Whenever you import a module like

const express = require('express')

express is a module with functions or objects or variables assigned to it .
take a look at /lib/express

you are able to access the function **createApplication** inside express module as **express()** because the function is assigned directly to the module like

> exports = module.exports = createApplication;

function createApplication(){
var app = function(req, res, next) {
app.handle(req, res, next);
};
//other codes
}

so you are able to access the function **createApplication** just calling express() as function

now when you check out the other section of the express library, you can see a bunch of other objects attached to the exports special object as well.

/**
* Expose the prototypes.
*/

exports.application = proto;
exports.request = req;
exports.response = res;

/**
* Expose constructors.
*/

exports.Route = Route;
exports.Router = Router;

// other exports

these objects or function assigned to export special object can be accessed from the import section using express as an object.

> express.{name}

express.Route
express.Router etc

In the end you are just exporting a bunch of methods or objects that are attached to the module.export special object inside express js file

to read more on module.export special object go [here][1]


[1]:

[To see links please register here]

Reply

#6
1- var express = require('express');

first line require the express package .js file, und "require" it's only returnd what was exported in the js file with (module.exports).
so we have only pointer to this function .

2- var app = express();

in second line, we use 'app' as pleaceholder to receive the output from express() function, which is an object, we can use it in our code (by accessing his methods and properties like any other Class )

in other words, we use the 'app' Object, which which produced from 'express()' function, that we imported from 'express.js' file .

NOTE 1) and of course we can give any name instead of 'app' , but it's a good practice when you follow what the most developers use to name this packages, that make easier to understand your code specialty when you work in team.

NOTE 2) after ES6, we use 'const' instead of 'var' .
Reply

#7
Simple what we wrote in node js when we require a modules for our application

const modue_need1=require('module_name');
const modue_need2=require('module_name2');
const modue_need3=require('module_name3');
const modue_need4=require('module_name4');
const modue_need....=require('module_name.....');



So for every module, we need to write such a big code, and time-consuming now to reduce these lengthy codes and time slice what we do? We need node js Framework like Express js
which will overcome these problems mean "write less, do more"
we just use this two-line and all the requirement(modules) about our app will be their in-app object which we can use whenever we need so do not need to call require for every module.
"write less, do more"

const express=require('express');
const app=express();
console.log(app);
Reply

#8
> Is it a method or a constructor?

Neither; it's a *function*, although if you said "method" I don't think anyone would give you a hard time.

A *method* is a function attached to an object. In JavaScript, methods are <s>just</s> mostly functions that you reference via object properties. *(Update: As of ES2015, if you use method syntax to create them, they're* slightly *more than that because they have access to `super`.)*

A *constructor*, in JavaScript, is a function you call via the `new` operator. Even though other functions may create things, we don't typically call them "constructors" to avoid confusion. Sometimes they may be "creator" or "builder" functions.

> Where does it come from?

ExpressJS is a [NodeJS module][1]; `express` is the name of the module, and also the name we typically give to the variable we use to refer to its main function in code such as what you quoted. NodeJS provides the [`require` function][2], whose job is to load modules and give you access to their exports. (You don't *have* to call the variable `express`, you can do `var foo = require('express');` and use `foo` instead, but convention is that you'd use the module's name, or if only using one part of a module, to use the name of that part as defined by the module's documentation.)

The default export of `express` is a bit unusual in that it's a function that also has properties on it that are also functions (methods). That's perfectly valid in JavaScript,¹ but fairly unusual in some other languages. That's why you can create an `Application` object via `express()`, but also use `express.static(/*...*/)` to set up serving static files.

----

¹ In fact, it's completely normal. Functions have a couple of standard methods by default: `call`, `apply`, and `toString` for instance.

[1]:

[To see links please register here]

[2]:

[To see links please register here]

Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through