Validating user requests is one of the key elements of a web application, and is critical for its performance.
In this tutorial, we validate the user request against elements present inside an array. In real-time web applications, the request is validated against database values.
Validating User Request In Express: Node.js app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var names = [
"Satish",
"Kiran",
"Sunitha",
"Jyothi"
];
app.param('username', function(req, res, next, username){
var flag = parseInt(names.indexOf(username), 10);
if(flag >= 0)
next();
else
res.end("No Such User!");
});
app.get('/user/:username', function(req, res){
res.send("Viewing user: "+req.params.username);
});
var names = [ "Satish", "Kiran", "Sunitha", "Jyothi"
];
app.param('username', function(req, res, next, username){
var flag = parseInt(names.indexOf(username), 10);
if(flag >= 0) next();
else res.end("No Such User!");
});
app.get('/user/:username', function(req, res){
res.send("Viewing user: "+req.params.username);
});
when the user requests for data via the route /user/someUsername we check if the user is actually present. If he is present, we’ll serve the data or else we’ll send No Such User! message to the browser.
To keep the routes clean, we shift the code to app.param First parameter indicates to which route the app.param is bound to. The callback method takes a couple of arguments – request, response, next and the username the user has requested.
we make use of indexOf() method to check if the requested username is actually present in our array. If the element is present in the array, indexOf() returns its position or else it returns -1. If it returns 0 or any other positive value, then call next() to pass the control to the next layer of execution or else, display No Such User! and end the response.
Here we have an array of objects. Once the user requests company information using company id(/user/:id), we check through each object’s id and if it matches we call next() or else send No Such User! to the browser.
some output /user/0 No Such User!
/user/1 Company: Apple Product: iPhone
/user/2 Company: Google Product: Nexus
/user/4 Company: Microsoft Product: Nokia Lumia
Home Work Combine today’s learning with Error handling and write complete code for user request validation as well as error handling using Error object.
Follow the order in this post and make sure to practice all the tutorials and also share your knowledge with our awesome community on our official forum or in respective articles comment section.
If you got to learn anything from our website, then please do not forget to share this page with your friends on Facebook, Google Plus, LinkedIn, Twitter etc..
In this video tutorial we shall illustrate the use of comparison operators in MongoDB.
Comparison Operators $all $in $nin – not in $ne – not equal to $gt – greater than $gte – greater than or equal to $lt – less than $lte – less than or equal to
JavaScript file load.js – in path: C:/test/load.js
db.person.insert({
name : 'Satish',
age : 25,
skills : ['nodejs', 'mongoDB', 'HTML5']
});
db.person.insert({
name : 'Kiran',
age : 27,
skills : ['PHP', 'mySQL', 'HTML5']
});
db.person.insert({
name : 'Sunitha',
age : 24,
skills : ['html', 'ASP']
});
db.person.insert({
name : 'Jyothi',
age : 23,
skills : ['html', 'ASP']
});
db.person.insert({
name : 'Varsha',
age : 30,
skills : ['.NET', 'Java']
});
db.person.insert({
name : 'Amogh',
age : 29,
skills : ['C#', 'ASP']
});
db.person.insert({
name : 'Satish',
age : 25,
skills : ['nodejs', 'mongoDB', 'HTML5']
});
db.person.insert({
name : 'Kiran',
age : 27,
skills : ['PHP', 'mySQL', 'HTML5']
});
db.person.insert({
name : 'Sunitha',
age : 24,
skills : ['html', 'ASP']
});
db.person.insert({
name : 'Jyothi',
age : 23,
skills : ['html', 'ASP']
});
db.person.insert({
name : 'Varsha',
age : 30,
skills : ['.NET', 'Java']
});
db.person.insert({
name : 'Amogh',
age : 29,
skills : ['C#', 'ASP']
});
This JavaScript file contains some simple data, to be inserted into MongoDB server. It contains, persons name, age and skills(in array form) person is the collection name, we’re creating.
C:\mongodb>cd bin
C:\mongodb\bin>mongo 127.0.0.1/satish C:/temp/load.js
MongoDB shell version: 2.4.3
connecting to: 127.0.0.1/satish
C:\mongodb\bin>mongo
MongoDB shell version: 2.4.3
connecting to: test
C:\mongodb>cd bin
C:\mongodb\bin>mongo 127.0.0.1/satish C:/temp/load.js
MongoDB shell version: 2.4.3
connecting to: 127.0.0.1/satish
C:\mongodb\bin>mongo
MongoDB shell version: 2.4.3
connecting to: test
Once these data/documents are loaded into new database, we start operating on this data using comparison operator.
$lt – less than – Matches vales that are less than the value specified in the query. $lte – less than or equal to – Matches values that are less than or equal to the value specified in the query.
Here we’re inserting some data/record/documents into the collection person.
Database’s Before running the script
1
2
3
4
5
6
7
8
9
10
11
12
13
C:\>cd mongodb
C:\mongodb>cd bin
C:\mongodb\bin>mongo
MongoDB shell version: 2.4.3
connecting to: test
> show dbs
admin 0.203125GB
company 0.203125GB
local 0.078125GB
> exit
bye
C:\>cd mongodb
C:\mongodb>cd bin
C:\mongodb\bin>mongo
MongoDB shell version: 2.4.3
connecting to: test
> show dbs
admin 0.203125GB
company 0.203125GB
local 0.078125GB
> exit
bye
Before running the script, we have only 3 databases.
Running the script
1
2
3
C:\mongodb\bin>mongo 127.0.0.1/satish C:/temp/load.js
MongoDB shell version: 2.4.3
connecting to: 127.0.0.1/satish
C:\mongodb\bin>mongo 127.0.0.1/satish C:/temp/load.js
MongoDB shell version: 2.4.3
connecting to: 127.0.0.1/satish
Here, mongo is the JavaScript shall. 127.0.0.1 is nothing but our localhost. satish is the new database we are creating. C:/temp/load.js is the path of load.js file. We’re loading the contents of load.js file into new database satish.
Database’s After running the script
1
2
3
4
5
6
7
8
9
10
11
12
13
C:\mongodb\bin>mongo
MongoDB shell version: 2.4.3
connecting to: test
> show dbs
admin 0.203125GB
company 0.203125GB
local 0.078125GB
satish 0.203125GB
> use satish
switched to db satish
> show collections
person
system.indexes
C:\mongodb\bin>mongo
MongoDB shell version: 2.4.3
connecting to: test
> show dbs
admin 0.203125GB
company 0.203125GB
local 0.078125GB
satish 0.203125GB
> use satish
switched to db satish
> show collections
person
system.indexes
New database satish has been added and it has person collection, which we loaded from the JavaScript file.
Note: This method will be handy while migrating our application from one mongoDB server to another mongoDB server. There is import/export options in mongoDB, but this method is also helpful if we have some custom data to be inserted. nontheless a useful tool to have.
1 or true means, those {key: value} pairs need to be returned. 0 or false means, excluding those {key: value} pairs, all other {key: value} pairs(records) needs to be returned.
> db.info.find({name: 'Apple'}, {product: true, emp_no: false}).forEach(printjson);
Wed May 08 12:11:30.184 JavaScript execution failed: error: {
"$err" : "You cannot currently mix including and excluding fields.
Contact us if this is an issue.",
"code" : 10053
} at src/mongo/shell/query.js:L128
> db.info.find({name: 'Apple'}, {product: 0, emp_no: 1}).forEach(printjson);
Wed May 08 12:11:40.840 JavaScript execution failed: error: {
"$err" : "You cannot currently mix including and excluding fields.
Contact us if this is an issue.",
"code" : 10053
} at src/mongo/shell/query.js:L128
> db.info.find({name: 'Apple'}, {product: true, emp_no: false}).forEach(printjson);
Wed May 08 12:11:30.184 JavaScript execution failed: error: { "$err" : "You cannot currently mix including and excluding fields. Contact us if this is an issue.", "code" : 10053
} at src/mongo/shell/query.js:L128
> db.info.find({name: 'Apple'}, {product: 0, emp_no: 1}).forEach(printjson);
Wed May 08 12:11:40.840 JavaScript execution failed: error: { "$err" : "You cannot currently mix including and excluding fields. Contact us if this is an issue.", "code" : 10053
} at src/mongo/shell/query.js:L128
We can not combine true(1) and false(0) together in the second parameter.
Special Provision! But we can do it with _id(ObjectId)
Operation of second document/record in ‘info’ collection. This illustrates that the syntax for sub-objects, array and the normal key/value pair is same.
If we use findOne() method on this collection, and the condition being the name key, then the oldest document will be returned. Only one key: value pair is returned, as findOne() returns only single object.