Angular 7 / Express-POST请求中为空响应正文

时间:2019-06-05 20:16:17

标签: node.js angular express ionic-framework

我试图从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 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())

1 个答案:

答案 0 :(得分:0)

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

在我的情况下,我在fetch()选项中设置了“ mode”:“ no-cors”,因此从服务器返回的值将显示为“ opaque”

redux fetch body is not use with no cors mode

我希望这会有所帮助!