Do not get body from fetch/POST request


Im using fetch in a client script to make a POST request to my server controller. So far no problem. The server answers with the JSON-Data defined in the controller. The only problem is that I’m unable to read the posted body object in the controller.

This ist the POST request from the client:

var myHeaders = new Headers()
myHeaders.append('content-type', 'application/json')
   fetch('amsbam/data', {
      method: 'POST',
      headers: myHeaders,
      body: JSON.stringify('{"name": "ingo"}')

    .then(result => {
    .then(j => {
    .catch(err => {
    	console.log("ERR: ", err)

And this is my controller. As mentioned before, it sends the response but request.all() and request.body are {}.

async fetch ({request, response}) {
   const data = await request.all()
   console.log(data, request.body)

What do I have to do to read the body from my fetch request?
Is it maybe a security issure in adonis? I have already added the route to the csrf exeption list.


all function is not async, so remove await keyword.

  1. make sure on you have listed your fetch method on your route.js file

  2. to return json response, example : return response.status(200).json({message : 'success', data : data})

  3. you should use try - catch block, to make sure you catch error or exception and you can return it as json response as well , example :

return response.status(200).json({message : 'success', data : data})
return response.status(404).json({message : 'error'})

and my last suggestion, you don’t need await while you get the value from request.all() though is still work even you don’t remove it, but it’s not a proper way…request.all() is not a promise, so await won’t be needed