To Install Mean Stack run the following comment
- npm install -g mean-cli
- mean init yourNewApp
- npm install express --save
- body-parser - This is a node.js middleware for handling JSON, Raw, Text and URL encoded form data.
- cookie-parser - Parse Cookie header and populate req.cookies with an object keyed by the cookie names.
- multer - This is a node.js middleware for handling multipart/form-data.
- $ npm install body-parser --save
- $ npm install cookie-parser --save
- $ npm install multer --save
Step 1: Run "npm init"
Step 2 : Insert all required parameter in 'npm init' and create the start page 'index.js'.
Step 3:Amend the package.json as below
{
"name": "demoforexpress",
"version": "1.0.0",
"description": "Demo for Express",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "MRB",
"license": "ISC",
"dependencies": {
"body-parser": "^1.14.1",
"cookie-parser": "^1.4.0",
"express": "^4.13.3",
"multer": "^1.1.0"
}
}
Step 4: index.js will be as below
var express = require('express');
var app = express();
app.get('/', function (req, res) {
console.log("Get method Called")
res.send('Response from GET method');
})
// This responds a POST request for the homepage
app.post('/', function (req, res) {
console.log("Post method called");
res.send('Response from POST method');
})
// This responds a DELETE request for the /del_user page.
app.delete('/del_user', function (req, res) {
console.log("delete method called for /del_user");
res.send('Response from Delete Method');
})
// This responds a GET request for the /list_user page.
app.get('/list_user', function (req, res) {
console.log("get Method called for /list_user");
res.send('response from GET for /list_user');
})
// This responds a GET request for abcd, abxcd, ab123cd, and so on
app.get('/ab*cd', function(req, res) {
console.log("Got a GET request for /ab*cd");
res.send('Response from Page Pattern Match');
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
Step 5: Run the application by 'node index.js' , test in rest client and see the responses in console.
----------------------------More on Express-------------------------------------
package.json
{
"name": "demoforexpress",
"version": "1.0.0",
"description": "Demo for Express",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "MRB",
"license": "ISC",
"dependencies": {
"body-parser": "^1.14.1",
"cookie-parser": "^1.4.0",
"express": "^4.13.3",
"multer": "^1.1.0",
"express-session":"*",
"connect-busboy":"*",
"path":"*",
"fs-extra":"*",
"formidable":"*"
}
}
index.js
// fsutil file createnew index.js 2000
var express = require('express');
var app = express();
///-------------Basic Authentication-----------------------
var loginuser;
// Authenticator
app.use(function(req, res, next) {
var auth;
// check whether an autorization header was send
if (req.headers.authorization) {
// only accepting basic auth, so:
// * cut the starting "Basic " from the header
// * decode the base64 encoded username:password
// * split the string at the colon
// -> should result in an array
auth = new Buffer(req.headers.authorization.substring(6), 'base64').toString().split(':');
}
// checks if:
// * auth array exists
// * first value matches the expected user
// * second value the expected password
if ((!auth || auth[0] !== 'testuser' || auth[1] !== 'testpassword') && (!auth || auth[0] !== 'testuser2' || auth[1] !== 'testpassword2'))
{
// any of the tests failed
// send an Basic Auth request (HTTP Code: 401 Unauthorized)
res.statusCode = 401;
// MyRealmName can be changed to anything, will be prompted to the user
res.setHeader('WWW-Authenticate', 'Basic realm="MyRealmName"');
// this will displayed in the browser when authorization is cancelled
res.end('Unauthorized');
} else {
// continue with processing, user was authenticated
loginuser=auth[0];
next();
}
// if (!auth || auth[0] !== 'testuser' || auth[1] !== 'testpassword')
// {
// // any of the tests failed
// // send an Basic Auth request (HTTP Code: 401 Unauthorized)
// res.statusCode = 401;
// // MyRealmName can be changed to anything, will be prompted to the user
// res.setHeader('WWW-Authenticate', 'Basic realm="MyRealmName"');
// // this will displayed in the browser when authorization is cancelled
// res.end('Unauthorized');
// } else {
// // continue with processing, user was authenticated
// loginuser=auth[0];
// next();
// }
});
////------------------------------End Authentication-------------------------------
app.get('/', function (req, res) {
console.log("Get method Called")
res.send('Response from GET method');
})
// This responds a POST request for the homepage
app.post('/', function (req, res) {
console.log("Post method called");
res.send('Response from POST method');
})
// This responds a DELETE request for the /del_user page.
app.delete('/del_user', function (req, res) {
console.log("delete method called for /del_user");
res.send('Response from Delete Method');
})
// This responds a GET request for the /list_user page.
app.get('/list_user', function (req, res) {
console.log("get Method called for /list_user");
res.send('response from GET for /list_user');
})
// This responds a GET request for abcd, abxcd, ab123cd, and so on
app.get('/ab*cd', function(req, res) {
console.log("Got a GET request for /ab*cd");
res.send('Response from Page Pattern Match');
})
//------------------Cookie---------------------------
//This responds a GET request for cookie
var cookieParser = require('cookie-parser');
app.use(cookieParser());
app.get('/cookie', function (req, res) {
//res.clearCookie("mycookie");
res.cookie("mycookie","manab",{maxAge:864000000});
res.setHeader('Content-Type', 'text/plain');
res.send('Response from GET Cookie method ' +JSON.stringify(req.cookies));
})
//------------------Session---------------------------
//This responds a GET request for session
var session = require('express-session');
app.use(cookieParser());
app.use(session({ secret: 'loginuser', cookie: { maxAge: 60000 }}));
app.get('/session', function (req, res) {
var sess = req.session;
if (sess.views) {
sess.views++
res.setHeader('Content-Type', 'text/html')
res.write('views: ' + sess.views + '
')
res.write('expires in: ' + (sess.cookie.maxAge / 1000) + 's
')
res.end()
} else {
sess.views = 1
res.end('welcome to the session demo. refresh!')
}
})
//------------------Uploading File---------------------------
//HTML For Uploading File
/*<!DOCTYPE html>
<html lang="en" ng-app="APP">
<head>
<meta charset="UTF-8">
<title>angular file upload</title>
</head>
<body>
<form method='post' action='upload' enctype="multipart/form-data">
<input type='file' name='fileUploaded'>
<input type='submit'>
</body>
</html>*/
var busboy = require('connect-busboy'); //middleware for form/file upload
var path = require('path'); //used for file path
var fs = require('fs-extra'); //File System - for file manipulation
app.use(busboy());
app.use(express.static(path.join(__dirname, 'public')));
//------------Without formidable--------
// app.route('/upload')
// .post(function (req, res, next) {
// var fstream;
// req.pipe(req.busboy);
// req.busboy.on('file', function (fieldname, file, filename) {
// console.log("Uploading: " + filename);
// //Path where image will be uploaded
// fstream = fs.createWriteStream(__dirname + '/img/' + filename);
// file.pipe(fstream);
// fstream.on('close', function () {
// console.log("Upload Finished of " + filename);
// res.redirect('back'); //where to go next
// });
// });
// });
//--------------------------------------
//------------------Uploading File With formidable
var bodyParser=require("body-parser");
var formidable = require("formidable");
app.use(bodyParser({defer: true}));
app.route('/upload')
.post(function (req, res, next) {
var form = new formidable.IncomingForm();
//Formidable uploads to operating systems tmp dir by default
form.uploadDir = "./img"; //set upload directory
form.keepExtensions = true; //keep file extension
form.parse(req, function(err, fields, files) {
res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:\n\n');
console.log("form.bytesReceived");
//TESTING
console.log("file size: "+JSON.stringify(files.fileUploaded.size));
console.log("file path: "+JSON.stringify(files.fileUploaded.path));
console.log("file name: "+JSON.stringify(files.fileUploaded.name));
console.log("file type: "+JSON.stringify(files.fileUploaded.type));
console.log("astModifiedDate: "+JSON.stringify(files.fileUploaded.lastModifiedDate));
//Formidable changes the name of the uploaded file
//Rename the file to its original name
fs.rename(files.fileUploaded.path, './img/'+files.fileUploaded.name, function(err) {
if (err)
throw err;
console.log('renamed complete');
});
res.end();
});
});
//----------------------------------------------------
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%d:%d", host, port)
})
Create server using HTTP,Express and HAPI
HTTP:
var http=require('http');
var handlerMethod=function(req,res){
res.end("Hello, This is a message from the handler of web server of");
}
http.createServer(handlerMethod).listen(1234,'localhost');
console.log("Http Server is running");
Express:
var express = require('express');
var app = express();
app.get(*,function(req,res){
res.end("response from server");
});
var server = app.listen(3000, function(){
console.log('Listening on port %d', server.address().port);
});
Hapi:
var Hapi = require('hapi');
var server = new Hapi.Server(3000);//port number during initialize
server.start(function () {
console.log('Server running at:', server.info.uri);
});
Difference between req.params,req.query and req.body :
(req.params) Checks route params, ex: /user/:id
(req.query) Checks query string params, ex: ?id=12 Checks urlencoded body params
(req.body), ex: id=12 To utilize urlencoded request bodies, req.body should be an object. This can be done by using the _express.bodyParser middleware.
Use Basic Authentication in the above example from Adv Rest Client:
URL-http://localhost:8081/
Header would be -Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3N3b3Jk
To change the Authorization,Click on Form ->'Edit Value' for authorization header->Basic
Difference between res.end and res.send :
res.send('Response from POST method');-automatically assumes a Content-Type of html
res.end('Response from POST method');-so no assumptions are made for the Content-Type
Send cookie in response in the above example
use- cookie-parser to set and get cookie in request and response
call -http://localhost:8081/cookie to check also the request cookie which is firsttime set by response cookie
Output - Response from GET Cookie method {"_ga":"GA1.1.2097241217.1451846328","mycookie":"manab"}
Use Session Variable in the above example:
call http://localhost:8081/session from different type of browser , IE+Chrome
Delete Moudles which is can't be deleted for alonger file path name
npm install rimraf -g
rimraf node_modules
Upload file:
ref:http://stackoverflow.com/questions/23691194/node-express-file-upload
node index.js and open http://localhost:8081/index.html
Two example , first one is commented and without formidable , second one with formidable package
No comments:
Post a Comment