Save the date! Join us on October 16 for our Product Ops launch event. Register here.
Sep 26, 2019 03:24 AM
So this is what I am using to get my data from airtable
import axios from "axios"
formSubmitHandler = e => {
axios
.get(
"https://api.airtable.com/v0/" + app_id + "/" + view,
{ headers: { Authorization: "Bearer " + app_key } },
)
.then(resp => console.log(resp))
.catch(error => console.log(error))
e.preventDefault()
}
This works very well, however when I try to post something into the same table and now using this:
formSubmitHandler = e => {
const { name, email } = this.state
const data = {
"records": [
{
"fields": {
"Name": name,
"Email": email,
}
}
]
}
console.log(data)
axios
.post(
"https://api.airtable.com/v0/" + app_id + "/" + view,
{ headers: { Authorization: "Bearer " + app_key } },
data
)
.then(resp => console.log(resp))
.catch(error => console.log(error))
e.preventDefault()
}
It doesn’t work and I always get ERROR 401, and that shouldn’t be the case as I already managed to get the information out of my airtable.
Any ideas why this is happening?
Thank you,
Tiago
Solved! Go to Solution.
Sep 26, 2019 07:51 AM
That looks okay but you might try using a table name instead of a view name. I say this only because I’m unsure about Axios requirements - best to eliminate this as a potential cause.
Since you’re getting a 401 are you absolutely sure that the API key of the user with access to the base granted read and write authority? This is unlikely to be the issue, but I always like to ask the obvious because that would cause the behavior you are experiencing - read/GET works, write/POST fails.
Sep 26, 2019 07:56 AM
Thank you! I think the order was the thing that was wrong!
const data = {
"records": [
{
"fields": {
"Name": name,
"Email": email,
}
}
]
}
let url = "https://api.airtable.com/v0/" + app_id + "/" + view
let axiosConfig = { headers: { Authorization: "Bearer " + app_key , 'Content-Type': 'application/json' } }
axios
.post(
url,
data,
axiosConfig
)
.then(resp => console.log(resp))
.catch(error => console.log(error))
Like this works!
Thank you so much for the help!
Really appreciate!
Sep 30, 2019 07:30 AM
Since you’re getting a 401 are you absolutely sure that the API key of the user with access to the base granted read and write authority? This is unlikely to be the issue, but I always like to ask the obvious because that would cause the behavior you are experiencing - read/GET works, write/POST fails.
Sep 30, 2019 09:33 AM
@snow_jhon, nope the issue was that my axiosConfig
was incomplete. ‘Content-Type’: ‘application/json’ needs to be there.
Oct 06, 2019 06:51 AM
By the way, the reason I was trying to implement this was because I wanted to put a contact from in my blog. I actually wrote about it on this post https://tiagofsanchez.netlify.com/2019-10-06-blog-series-building-a-contact-form-with-airtable/
it anyone is keen to have a read.
Again, thank you for the help.
Oct 10, 2019 07:26 AM
As a developer you get to create a database with a very nice to use interface.
Feb 16, 2022 12:26 AM
I can confirm this was the exact problem and solution I had as well.
I think my issue was not wrapping the headers inside a property like you did:
let axiosConfig = { headers: { Authorization: "Bearer " + app_key , 'Content-Type': 'application/json' } }
Mine was:
const headers = {
'Authorization': `Bearer <apiKey>`,
'Content-Type': 'application/json',
'Accept': 'application/json',
};
axios.post(url, data, headers).then((result) => {
Log(result)
let raw = formatRecords(result?.data?.records);
state.value.record = raw;
Log("state.value.records", state.value.records);
}).catch(error => {
loading.value = false;
error.value = error;
})
This makes sense, if axios was looking for a “headers” prop, but found no such prop.