我正在向后端进行访存呼叫,这是呼叫。
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
在通话中,它确实在我的数据库中记录了操作,因此该信息被保存,并在应将其发送回去之前被记录下来,但是正确的信息没有被发送回去。 谢谢您的任何答复。
答案 0 :(得分:2)
由于您使用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);
您可以在chrome控制台中玩另一个示例。
(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);
})();
我希望这会有所帮助。