Я пытаюсь получить / прочитать ответ от запроса POST, сделанного в Angular 7, если я устанавливаю API для возврата «text», все в порядке, но когда я делаю ответ JSON, тело ответа на Angular нуль.
Если я попробую API на Почтальоне, я получу полный ответ JSON body.
Я попытался изменить метод ответа в 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);
})
На Почтальоне я получаю такой результат:
На Angular я получаю это (JSON):
На Angular я получаю это (ТЕКСТ):
Edit:
Если я добавлю что-нибудь перед JSON в приложении Express, тело больше не будет иметь значение null:
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())