1

I think I have a good question. I'm making my own overarching request repo that I can just refer to rather than embedding all requests in each separate JS file.

For requests where I'm passing a body I need to pass two things into stringify

  1. The identifier denoted field
  2. The value denoted content

I don't seem to be able to replace the identifier field with its actual content, I think it is passing "field" being its name rather than the content of the "field" string.

Calling code:

Request.Request.useSendPostWithBody("User/checkAlt","email","XXX@XXX.uk")

Request code:

Request.useSendPostWithBody = (endpoint, field, content) => {
    const [ data, setData ]=useState('')

        useEffect(() => {

            fetch(`${window.ipAddress.ip}/${endpoint}`, {
                method: "POST",  
                headers:{'Content-Type':'application/json'},
                body: JSON.stringify({ email: content })}) // this works as the required field for this request is email

                // body: JSON.stringify({ field : content })}) // this doesn't and here is where I think the issue lies because not all requests are going to pass "email"

            .then((result)=> { return result.json() })

            .catch(error =>{ 
            console.log("error")
            })

            .then((data)=>{ setData(data)
            console.log('data')
            console.log(data) })

        },[])
    }

ABpositive
  • 291
  • 1
  • 18
  • 1
    Does this answer your question? https://stackoverflow.com/a/11508490/6322589 – lucasvw Nov 17 '21 at 20:19
  • 1
    Does this answer your question? [JavaScript set object key by variable](https://stackoverflow.com/questions/11508463/javascript-set-object-key-by-variable) – lucasvw Nov 17 '21 at 20:19

1 Answers1

2

you need to use brackets [] to denote that the key name needs to be evaluated, like so:

{
  // other values,
  body: JSON.stringify({ [field]: content })}),
}
Joe Lissner
  • 2,181
  • 1
  • 15
  • 21