Получить запрос, возвращающий статус-коры и читаемый поток - PullRequest
0 голосов
/ 19 октября 2018

Я делаю вызов извлечения на свой сервер, вот звонок.

    const response = await fetch(apiUrl + '/recipes', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Token token=${user.token}`
      },
      body: JSON.stringify({
        recipe: {
          recipeId: uri
        }
      })
    })

Тогда по этому маршруту я отправляю вызов на свой бэкэнд

router.post('/recipes', requireToken, (req, res) => {
  req.body.recipe.owner = req.user.id
  Recipe.create(req.body.recipe)
    .then(recipe => {
      console.log('Recipe object saved is', recipe)
      res.status(201).json({ recipe: recipe.toObject() })
    })
    .catch(err => handle(err, res))
})

Когда я делаю это, правильный объект записывается в журнал прямо перед отправкой обратно.Вот пример того, что регистрируется

{ __v: 0,
  updatedAt: 2018-10-19T15:47:16.809Z,
  createdAt: 2018-10-19T15:47:16.809Z,
  recipeId: 'http://www.edamam.com/ontologies/edamam.owl#recipe_7dae4a3b1f6e5670be3c2df5562e4782',
  owner: 5bc9fc6a3682194cdb8d6fa5,
  _id: 5bc9fc843682194cdb8d6fa7 }

Тем не менее, когда я получаю console.log, то, что я возвращаю на передний конец, я получаю это.

Response {type: "cors", url: "http://localhost:4741/recipes", redirected: false, status: 201, ok: true, …}
body: ReadableStream
bodyUsed: true
headers: Headers {}
ok: true
redirected: false
status: 201
statusText: "Created"
type: "cors"
url: "http://localhost:4741/recipes"
__proto__: Response

При вызове он записывает действие с моей базой данных, поэтому информация сохраняется и регистрируется непосредственно перед отправкой, однако соответствующая информацияне отправлен обратно.Заранее спасибо за любой ответ.

1 Ответ

0 голосов
/ 19 октября 2018

Поскольку вы используете fetch для выполнения запроса, ответ инкапсулируется в объекте Response, и для доступа к нему необходимо вызвать асинхронный метод json().Точно так же:

const Response = await fetch(apiUrl + '/recipes', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Token token=${user.token}`
  },
  body: JSON.stringify({
    recipe: {
      recipeId: uri
    }
  })
});

const json = await Response.json();
console.log(json);

Вы можете поиграть с другим примером в вашей хромированной консоли.

(async () => {  
  const Response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
  const res = await Response.json();
  console.log(res);
})();

ОБНОВЛЕНИЕ

Еще один способсделать это:

(async () => { 
  const response = await (
    await fetch('https://jsonplaceholder.typicode.com/todos/1')
  ).json();

  console.log(response);
})();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...