将JSON发送给Express

时间:2018-03-16 12:22:13

标签: javascript node.js angular express

我阅读了很多关于如何通过邮件发送json来发帖但没有工作或修复我的问题的帖子。

我的问题是,在阅读req.bodyreq是请求对象 我得到了这样的输出:{ '{"z":"z"}': '' }我发送了{z:"z"}

这个对象

这是不可预期的,并且之前没有看到过任何行为。

这是一个有角度的httpClient请求:

return new Promise((res,rej)=>{
        this.http.post("http://localhost:3000/Auth/Login",{z:"z"},{headers:new HttpHeaders('Content-Type:application/x-www-form-urlencoded')})
            .toPromise()
              .then(
              response =>{
               res(response)
              }
              ).catch(
                  err=>{
                      rej(err)
                  }
              )
    })

这是服务器代码:

router.route('/Login').all(function (req, res, next) {
    next();
}).post(function(req, res, next) {
    console.log(req.body);})

我想要的是获得我发送的同一个对象。

帮助!

1 个答案:

答案 0 :(得分:0)

在服务中(或使用api连接的地方)使用HttpClient中的@angular/common/http - 因为只有HttpClient才能使用HttpHeaders

简单服务的示例:

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Injectable()
export class AppService {

  constructor(private http: HttpClient) { }

  toparams = function ObjecttoParams(obj) {
    var p = [];
    for (var key in obj) {
      p.push(key + '=' + encodeURIComponent(obj[key]));
    }
    return p.join('&');
  };

  login(): any {
    return new Promise((res, rej) => {
      let obj = { z: "z" };
      this.http.post("http://localhost:3000/Login", this.toparams(obj), {headers:new HttpHeaders('Content-Type:application/x-www-form-urlencoded')})
        .toPromise()
        .then( response => {
            res(response)
          }
        ).catch(err => {
            rej(err)
          }
        )
    })
  };
}

在模块中:

import { HttpModule } from "@angular/http"
...
imports: [
  ....
  HttpModule
],

Node.js + express示例:

var express = require('express');
var app = express()
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

app.all("/*", function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With, X-Auth");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST");
    return next();
});

app.route('/Login').all(function(req, res, next) {
    next();
}).post(function(req, res, next) {
    console.log(req.body);
    res.json(req.body)
});

app.listen(3000)

现在当你发送{ z: "z" } api将返回相同的对象时,他不会将其解析为JSON。

获取JSON会不会更容易?