gpt4 book ai didi

node.js - Angular 7/Express - POST 请求上的空响应正文

转载 作者:行者123 更新时间:2023-12-02 14:15:16 26 4
gpt4 key购买 nike

我正在尝试获取/读取 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 上我得到这个结果: postman result

在 Angular 上我得到这个(JSON): angular result - json

在 Angular 上我得到这个(文本): angular result - text

编辑:

如果我在 Express 应用程序的 JSON 之前添加任何内容,则正文不再为空:

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

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

编辑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())

最佳答案

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

就我而言,我在 fetch() 选项中设置了“mode”:“no-cors”,因此服务器返回的值将显示为“不透明”

redux fetch body is not use with no cors mode

我希望这能有所帮助!

关于node.js - Angular 7/Express - POST 请求上的空响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56467392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com