【问题标题】:At server side, Req.body received as { }在服务器端, Req.body 接收为 { }
【发布时间】:2017-03-03 12:15:36
【问题描述】:

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);
    };
  }

}

在添加员工时,req.body 内容在服务器端收到时为{},这是服务器端代码

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;
授权后,路由发起并转到上面给出的post方法,这里req.body为空{}

【问题讨论】:

  • 格式和语法

标签: javascript angularjs node.js express


【解决方案1】:

您需要使用bodyParser 而不仅仅是要求它。

使用正文解析器添加.use(...)。有关详细信息,请参阅文档:

例如:

app.use(bodyParser.json());

【讨论】:

    【解决方案2】:
    var mongoose = require('mongoose');
    var express = require('express');
    var router = express.Router();
    var bodyParser = require('body-parser');
    

    //添加bodyparser中间件

     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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2018-08-10
      • 2020-02-15
      • 2021-03-25
      相关资源
      最近更新 更多