Node.js 使用Angular+;发出POST请求时返回空响应主体;快车

Node.js 使用Angular+;发出POST请求时返回空响应主体;快车,node.js,angular,express,Node.js,Angular,Express,我试图发出一个简单的POST请求,但服务器返回的响应是空的。我已经筛选了所有关于这个主题的SO问题,并尝试了发布的解决方案,但没有结果 我已尝试将请求头选项更改为使用'application/x-www-form-urlencoded',并将我的express应用程序中的bodyParser设置为app.use(bodyParser.urlencoded({extended:true}))但这也不起作用 验证服务.service.ts login(loginInfo: object) {

我试图发出一个简单的POST请求,但服务器返回的响应是空的。我已经筛选了所有关于这个主题的SO问题,并尝试了发布的解决方案,但没有结果

我已尝试将请求头选项更改为使用
'application/x-www-form-urlencoded'
,并将我的express应用程序中的bodyParser设置为
app.use(bodyParser.urlencoded({extended:true}))但这也不起作用

验证服务.service.ts

login(loginInfo: object) {
    return this.http.post<loginInfo>(this.loginUrl, { "test": "test" })
    .pipe(
        catchError(this.handleError)
    );
 }

 private handleError(error: HttpErrorResponse) {
    if (error.error instanceof ErrorEvent) {
       console.log('An error occured:', error.error.message);
    } else {
       console.log(`Backend returned code ${error.status}, ` +
      `body was ${error.error}`);
    }

    return throwError('Something bad happened; please try again later.')
 }
server.js(我在这里定义了路由,但它们并不相关)

我正在记录以下内容:

后端返回未定义的代码,主体未定义

发生了不好的事情;请稍后再试。

然而,当我尝试使用Postman时,我得到了预期的响应(即
请求主体:{}

我不确定为什么通过邮递员而不是应用程序检索到响应


感谢您的帮助。谢谢

您需要在
auth service.service.ts
中为
POST
请求设置
body

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

login(loginInfo: object) {
  const body = new HttpParams()
    .set('test', 'test');
  return this.http.post<loginInfo>(this.loginUrl, body)
    .pipe(
      catchError(this.handleError)
    );
}
从'@angular/common/http'导入{HttpParams};
登录(登录信息:对象){
const body=新的HttpParams()
.set(“测试”、“测试”);
返回this.http.post(this.loginUrl,body)
.烟斗(
catchError(this.handleError)
);
}

您需要在
auth service.service.ts
中为
POST
请求设置
body

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

login(loginInfo: object) {
  const body = new HttpParams()
    .set('test', 'test');
  return this.http.post<loginInfo>(this.loginUrl, body)
    .pipe(
      catchError(this.handleError)
    );
}
从'@angular/common/http'导入{HttpParams};
登录(登录信息:对象){
const body=新的HttpParams()
.set(“测试”、“测试”);
返回this.http.post(this.loginUrl,body)
.烟斗(
catchError(this.handleError)
);
}

尝试使用express.json将其丢失

app.use(express.json());


尝试使用express.json,因为它缺少

app.use(express.json());


我可以在浏览器中查看您的网络呼叫吗?我想查看请求标题。@BhushanBabar网络中没有显示任何内容。我也不明白为什么会这样。抱歉,我对Angular中的http调用基本上是新手,所以我可能遗漏了一些非常明显的东西。您的Angular版本是什么,我建议您首先尝试使用简单的代码,我的意思是删除用于错误处理的
管道
,删除返回类型
post
,只需使用非常简单的代码尝试您的代码,我甚至想说,为了使订阅服务本身更简单,并控制结果,如果您没有看到网络调用,您应该放置一个调试器,以查看您的服务代码是否可以访问。@BhushanBabar我使用的是6.2.9。我会试试你的建议,看看能不能解决。谢谢。我可以在浏览器中查看您的网络呼叫吗?我想查看请求标题。@BhushanBabar网络中没有显示任何内容。我也不明白为什么会这样。抱歉,我对Angular中的http调用基本上是新手,所以我可能遗漏了一些非常明显的东西。您的Angular版本是什么,我建议您首先尝试使用简单的代码,我的意思是删除用于错误处理的
管道
,删除返回类型
post
,只需使用非常简单的代码尝试您的代码,我甚至想说,为了使订阅服务本身更简单,并控制结果,如果您没有看到网络调用,您应该放置一个调试器,以查看您的服务代码是否可以访问。@BhushanBabar我使用的是6.2.9。我会试试你的建议,看看能不能解决。谢谢。谢谢你的评论。这似乎无法解决问题。@JacobL你的应用程序中有角度拦截器吗?没有(很抱歉回答太多,回答至少15个字符),谢谢你的评论。这似乎无法解决问题。@JacobL您的应用程序中有角度拦截器吗?没有(很抱歉,响应太冗长,至少有15个字符)
app.use(bodyParser.urlencoded({
    extended: true
}));