Sunday, 16 April 2017

body.req is not receiving POST parameters event with bodyparser. It is not working in browser, but working in POSTMAN

SERVER.js

var express=require("express");
var app=express();
var bodyParser=require("body-parser");
var expressJWT=require("express-jwt");
var jwt=require("jsonwebtoken");
var morgan=require("morgan");
var methodOverride=require("method-override");
var passport=require("passport");

require("./config/database");
require("./config/passport");

app.use(passport.initialize());
app.use(morgan("dev"));
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.use(bodyParser.json({type:"application/json"}));
app.use(methodOverride());

app.use(function(err,req,res,next){
  if(err)
    console.log(err);
  next();
});

app.use(function(err,req,res,next){
      res.setHeader("Access-Control-Allow-Origin","http://localhost:8080");
      res.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS, PUT, PATCH, DELETE");
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});

var routes=require("./config/routes");
routes(app,passport);

require("./config/passport")(passport);
app.listen(8080,function(err,connection){
    console.log("App listening on port 8080");
});

nodejs controller

var User=require("./../models/user");
var Token=require("./../shared/getToken");
var jwt=require("jwt-simple");
var config=require('./../../config/database');

module.exports={
    signup:signup,
    authenticate:authenticate,
    memberinfo:memberinfo
};



function authenticate(req,res){
    // if(err)
    //  console.log(err);
    console.log("in authenticate",req.body);
    if(!req.body.username || !req.body.password)
    {
        res.json({success: false,msg: 'Blank username or password '});
    }
    else
    {
        User.findOne({username: req.body.username},function(err,user)
        {
            if(err)
            {
                console.log('2');
                throw err;
            }
            if(!user)
            {
                console.log('3');
                return res.status(403).send({success: false,msg: 'Authentication failed.User not found'});
            }
            else
            {
                console.log('4');
                user.comparePassword(req.body.password,function(err,isMatch)
                {
                    if(isMatch && !err)
                    {
                        var token=jwt.encode(user,config.secret);
                        res.json({success: true,token: 'JWT '+token});
                    }
                    else
                    {
                        return res.status(403).send({success: false,msg: 'Authentication failed.Wrong Password'});
                    }

                });
            }   
        });
    }
}

angularjs controler from where request is made.

$scope.login=function(user){
    console.log(user);
    if(user.username && user.password){
        var url=baseURL+"authenticate";
        $http.post(url,user,{'Content-Type': 'application/x-www-form-urlencoded'}).then(function(response){
            console.log(response.data);
            if(response.status==200){
                if(response.data.success && response.data.token && AuthService.login(response.data.token)){
                    $location.path("/app/dashboard");
                }
            }
        },function(err){
            console.log(err);
            if(err.status==401)
                MessageService.showMessage("User does not exist.");
            if(err.status==404)
                MessageService.showMessage("Error Occured.");
        });
    }else{
        MessageService.showMessage("Please provide all fields.");
    }
};

I am trying to create a simple mobile app using Ionic Framework with MEAN Stack. But I am facing this problem since 3 days. I am unable to find the solution.The problem is: When I am making request for authentication with paramters {"username":"something","password":"something"} then req.body in authenticate function is {}. Body parser is already running in server. But this is working fine in POSTMAN but not in browser. what to do ?



via HARISH RATHOR

No comments:

Post a Comment