我阅读了很多关于如何通过邮件发送json来发帖但没有工作或修复我的问题的帖子。
我的问题是,在阅读req.body
时req
是请求对象
我得到了这样的输出:{ '{"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);})
我想要的是获得我发送的同一个对象。
帮助!
答案 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会不会更容易?