0

import {
  Injectable
} from '@angular/core';
import {
  Http,
  XHRBackend,
  RequestOptions,
  Request,
  RequestOptionsArgs,
  Response,
  Headers
} from '@angular/http';
import {
  Observable
} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

import {
  EmployeeSchema
} from '../schemas/EmployeeSchema';

@Injectable()
export class HttpService extends Http {

  headers = new Headers();
  constructor(public backend: XHRBackend, options: RequestOptions) {
    super(backend, options);
    let token = localStorage.getItem('realtoken');;
    options.headers.set('Authorization', ` ${token}`);

  }
  post(url: string, body:Object, options ? : RequestOptionsArgs): Observable < Response > {
    this.headers.append('Content-Type', 'application/json');
    let token = localStorage.getItem('realtoken');
    if (typeof url === 'string') {
      if (!options) {
        options = {
          headers: this.headers
        };
      }
      options.headers.set('Authorization', ` ${token}`);
    }
    return super.post(url, body, options)
      .catch(this.catchAuthError(this));
  }
  
  private catchAuthError(self: HttpService) {
    return (res: Response) => {
      if (res.status === 401 || res.status === 403) {
        console.log(res);
      }
      return Observable.throw(res);
    };
  }

}

on adding an employee, req.body content is {} when received at server side, here is the server side code

var mongoose = require('mongoose');
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');


//schema-models
var employeeCollection = require('../../model/employee.model.js');
var organizationCollection = require('../../model/organization.model.js');

router.post('/new', function(req, res) {
  var bodycontent = req.body;
  var addcontent = new employeeCollection(add);
  console.log(bodycontent); //here req.body is empty {}
  addcontent.save(function(err, data) {
    if (err) {
      res.send(err);
    } else {
      console.log('data', data);
      res.json(data);
    }
  });
});

module.exports = router;
After authorization, the route initiated and goes to the post method given above, here the req.body is empty {}.
kat1330
  • 5,134
  • 7
  • 38
  • 61

2 Answers2

0

You need to use the bodyParser instead of just requiring it.

Add a .use(...) with the body parser. See the docs for details:

For example:

app.use(bodyParser.json());
rsp
  • 107,747
  • 29
  • 201
  • 177
0
var mongoose = require('mongoose');
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');

//Add bodyparser middlerware

 var app = express();
 app.use(bodyParser.urlencoded());
 app.use(bodyParser.json());



//schema-models
var employeeCollection = require('../../model/employee.model.js');
var organizationCollection = require('../../model/organization.model.js');

router.post('/new', function(req, res) {
  var bodycontent = req.body;
  var addcontent = new employeeCollection(add);
  console.log(bodycontent); //here req.body is empty {}
  addcontent.save(function(err, data) {
    if (err) {
      res.send(err);
    } else {
      console.log('data', data);
      res.json(data);
    }
  });
});

module.exports = router;
Love-Kesh
  • 777
  • 7
  • 17