【问题标题】:Angular 7 / Express - Null response body on POST requestAngular 7 / Express - POST 请求的空响应正文
【发布时间】:2019-10-21 08:55:07
【问题描述】:

我正在尝试从 Angular 7 中发出的 POST 请求中获取/读取响应,如果我将 API 设置为返回“文本”一切正常,但是当我将响应设为 JSON 时,Angular 上的响应正文是空。

如果我在 Postman 上尝试 API,我会得到完整的响应 JSON 正文。

我尝试更改 Express API 上的响应方法(从简单的 res.json() 到声明 Content-Type 并使用 res.end() 发送它的“旧”方式),没有任何改变。

我在后端使用的响应代码:

res.status(200).json({
    success: true,
    token: token
})

我也尝试过:

res.writeHead(200, { 'Content-Type': 'application/json' })
var json = JSON.stringify({
    success: true,
    token: token
})
res.end(json)

我在 Angular 上使用的服务:

login(username: string, password: string): Observable<any> {
    let body = {username: username, password: password};
    let headers = new HttpHeaders(); 
    headers.set('Content-Type', 'application/json');

    return this.http.post(this.baseUrl + "/login/sign-in", body, {headers: headers, responseType: 'json', observe: 'response'});
  }

对该服务的调用:

this.api.login("admin", "password").subscribe(result => {
    console.log(result);
})

在 Postman 上,我得到以下结果:

在 Angular 上,我得到了这个(JSON):

在 Angular 上我得到这个(文本):

编辑:

如果我在 Express 应用的 JSON 之前添加 anything,则正文不再为空:

res.writeHead(200, { 'Content-Type': 'application/json' })
    var json = JSON.stringify({
    success: true,
    token: token
})
res.end('some_char' + json)

结果(当然响应出错了):

编辑 2:

我也在尝试(没有运气)这个简单版本的端点:

const express = require('express')

const app = express()

app.post('/login/sign-in', (req, res) => res.json({ value: 1 }))

app.listen(3000, () => {
    console.log('App running on port 3000.')
})

解决方案:

这都是 CORS 问题,我将其添加到后端,一切正常:

app.use(cors())

【问题讨论】:

  • 您在邮递员中显示的响应具有message 属性。我在您的节点代码中没有看到;那是从哪里来的?另外,当您使用res.send 时,您会看到什么行为?
  • 对不起,我无法理解,我在 Angular 和 Postman 上使用完全相同的端点。使用 res.send 我得到与 usign res.json 相同的行为
  • 好的,现在我明白了你的意思,我删除了 message 属性以进行测试。但它仍然是同一个端点。我还进行了另一项测试,制作了一个使用简单的fetch et voilà 使用该端点的节点应用程序,我得到了正确的响应。复制到 Angular 项目中的完全相同的方法无法完成这项工作。我现在很迷茫

标签: node.js angular express ionic-framework


【解决方案1】:

花了几分钟试图找出为什么身体会是空的,

在我的例子中,我在 fetch() 选项中设置了 "mode":"no-cors",因此来自服务器的返回值将显示为 "opaque"

redux fetch body is not use with no cors mode

我希望这会有所帮助!

【讨论】:

  • 没错!这只是一个 CORS 问题,修复了服务器端,现在一切正常。
猜你喜欢
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多