Angular 2 http发布无法正确发送正文

时间:2018-08-20 15:42:57

标签: angular mongodb

这是我的代码有问题

var express = require('express');
var router = express.Router();

var mongojs = require('mongojs');
var db = mongojs('mongodb://lee:Zzbawsoldd1@ds163630.mlab.com:63630/bookings_drbookings',['bookings']);

router.get('/book', function(req,res,next){

    db.bookings.find(function(err, bookings){
        if(err){
            res.send(err);
        }else{
            res.json(bookings);
        }
        
    });
});

// Get Single Todo
router.get('/book/:id', function(req, res, next){
    db.bookings.findOne({
        _id: mongojs.ObjectId(req.params.id)
    }, function(err, todo){
        if(err){
           res.send(err); 
        } else {
           res.json(todo);
        }
    });
});




router.post('/book', function(req, res, next){
    var todo = req.body;
    console.log(todo);
    
    /*if(!todo.text || !(todo.isCompleted + '')){
        res.status(400);
        res.json({
            "error": "Invalid Datazz"
        });
    } else {*/
        db.bookings.save(todo, function(err, result){
            if(err){
                res.send(err); 
            } else {
                res.json(result);
            }
        });
    
});



router.put('/book/:id', function(req, res, next){
    var bookinfo = req.body;
    var updObj = {};
    
    if(bookinfo.isCompleted){
       updObj.isCompleted = bookinfo.isCompleted;
    }
    
    if(bookinfo.text){
        updObj.text = bookinfo.text;
    }
    
    if(!updObj){
        res.status(400);
        res.json({
            "error": "Invalid Data"
        });
    } else {
        db.bookings.update({
            _id: mongojs.ObjectId(req.params.id)
        },updObj, {}, function(err, result){
            if(err){
                res.send(err); 
            } else {
                res.json(result);
            }
        });
    }
});

router.delete('/book/:id', function(req, res, next){
    db.bookings.remove({
        _id: mongojs.ObjectId(req.params.id)
    },'', function(err, result){
        if(err){
            res.send(err); 
        } else {
            res.json(result);
        }
    });
});
module.exports = router;

import { Injectable } from '@angular/core';
import { Http , Headers , } from '@angular/http';
import 'rxjs/add/operator/map';
 
 

@Injectable()
export class BookService {

    constructor(private _http:Http){

    }

    getTodos(){
        return this._http.get('/api/v1/book')
            .map(res => res.json());
    }

    saveBooking(booking){
        var headers = new Headers();
        headers.append('Content-Type', 'application/json');

                 
      
        return this._http.post('/api/v1/book' , JSON.stringify({ b: 'texts.value',
      isCompleted: 'b'}), {headers: headers})
            .map(res => res.json());
            
    }
    
}

我的angular2应用程序存在问题-我创建了一个服务,用于将发帖请求用于mongodb,但是我的req.body始终为空。

当我单击发布时,它会发布到我的mongodb上,但没有从服务中获取数据。

这是我的服务和服务器请求

这是我的代码:

enter image description here

2 个答案:

答案 0 :(得分:0)

您使用了错误的http导入。

应该是:

import { HttpClient } from '@angular/common/http';

constructor(private http: HttpClient) {}

然后,您不再需要映射到JSON,因为它是自动完成的。您也不需要对JSON进行字符串化处理或附加这些标头,因为默认情况下,此HttpClient中默认设置了app / json。

答案 1 :(得分:0)

HttpClient guide for Angular

1)您需要使用HttpClient实例

2)标头实例是不可变的,因此您需要在.append()上重新分配标头

3)默认情况下,HttpClient在有效负载上执行JSON.stringify,您无需在发送前对其进行字符串化,否则您将必须在后端修剪掉一对多余的引号。