Post API request helper handler Attempt
Answered
Asian paper wasp posted this in #help-forum
Asian paper waspOP
import axios, { AxiosRequestConfig } from 'axios'
const postData = async (url = '', data?: any, options?: any, strictOK: boolean = false) => {
try {
const config: AxiosRequestConfig = {
...options,
method: 'POST',
proxy: false,
url: url,
data: data
}
console.log("postData - Axios config", config)
const response = await axios(config)
console.log("postData - response status", response.status)
console.log("postData - response data", response.data)
if (response.data.errors) {
return {
isError: true,
status: response.status,
message: response.data.errors[0]
}
}
if (response.status = 203 || (strictOK && response.status != 200)) {
return {
isError: true,
status: response.status,
message: response.data.data
}
}
if (response.status >= 200 && response.status <= 299) {
return response.data
}
if (response.data && response.status > 299) {
return {
isError: true,
status: response.status,
message: response.data
}
}
return new Error('Bad Request')
}
catch (error: any) {
console.error("postData - error", error.message)
if (error.response) {
const { response } = error
const errors = response.data.fieldErrors ? response.data.fieldErrors : response.data
return {
isError: true,
status: response.status,
errors,
}
}
if (error.Request) {
return error.Request
}
return error.message
}
}
export default postDataAnswered by Ray
the filename of the route handler in app router need to be
so create it at
route.tsso create it at
app/api/engagement/add-to-discord/route.ts32 Replies
Asian paper waspOP
I tried making my own helper function to just call whenever i want to call the backend however its not working as expected
const handleAddToDiscord = async () => {
const res = await postData(`api/engagement/add-to-discord`, {emoteList: emoteList})
}This is how I call it but whenever I do, I get this error
add-to-discord is the backend handler
I beleive the the problem is because my postData handler isnt server side
but idk how to do that
@Asian paper wasp Click to see attachment
the filename of the route handler in app router need to be
so create it at
route.tsso create it at
app/api/engagement/add-to-discord/route.tsAnswer
@Ray the filename of the route handler in app router need to be `route.ts`
so create it at `app/api/engagement/add-to-discord/route.ts`
Asian paper waspOP
Ill test that out
When I was working with my internship our project configured differently so I assume I cant do the same here
@Ray the filename of the route handler in app router need to be `route.ts`
so create it at `app/api/engagement/add-to-discord/route.ts`
Asian paper waspOP
Do I need to put api into pages?
@Ray were you using page router?
Asian paper waspOP
Possibly
you can create at
app/engagement/add-to-discord/route.ts then the url will be /engagement/add-to-discord@Ray you can create at `app/engagement/add-to-discord/route.ts` then the url will be `/engagement/add-to-discord`
Asian paper waspOP
shouldnt it be api/engagment...
@Asian paper wasp shouldnt it be api/engagment...
no if the file is at
app/engagement/add-to-discord/route.tsapp/api/engagement/add-to-discord/route.ts - > /api/engagement/add-to-discorddoes this mean its working?
@Asian paper wasp Click to see attachment
yes but look like you have problem in route.ts
Asian paper waspOP
ok ill check it out thank you
@Asian paper wasp ok ill check it out thank you
you should export a
POST() function in route.tsexport async function POST(req: Request) {}@Ray you should export a `POST()` function in route.ts
`export async function POST(req: Request) {}`
Asian paper waspOP
import { NextApiRequest, NextApiResponse } from 'next';
export async function POST(req: NextApiRequest, res: NextApiResponse) {
try {
const data = req.body;
res.status(200).json({ message: 'POST request successful', data });
} catch (error) {
res.status(500).json({ error: 'Internal Server Error' });
}
}TypeError: res.status is not a function@Asian paper wasp <:Hmm:889032126622728192>
js
import { NextApiRequest, NextApiResponse } from 'next';
export async function POST(req: NextApiRequest, res: NextApiResponse) {
try {
const data = req.body;
res.status(200).json({ message: 'POST request successful', data });
} catch (error) {
res.status(500).json({ error: 'Internal Server Error' });
}
}
`TypeError: res.status is not a function`
yeah check the doc, the second param is not res
import { NextRequest, NextResponse } from 'next/server';
export async function POST(req: NextRequest) {
try {
const data = await req.json();
return NextResponse.json({ message: 'POST request successful', data })
} catch (error) {
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 })
}
}Asian paper waspOP
theres no res?
Asian paper waspOP
oh i just return res
Ok no more bothering you, thanks you!
np