mirror of
https://github.com/jorgev259/soc_site-astro.git
synced 2025-06-29 07:57:41 +00:00
Simply formData parsing
This commit is contained in:
parent
0e6e08beb2
commit
12063db819
2 changed files with 15 additions and 5 deletions
|
|
@ -3,7 +3,7 @@ import * as s from 'superstruct'
|
||||||
import prismaClient from 'utils/prisma-client'
|
import prismaClient from 'utils/prisma-client'
|
||||||
|
|
||||||
import { AlbumStatus } from '@prisma/client'
|
import { AlbumStatus } from '@prisma/client'
|
||||||
import { Status, slug } from 'utils/form'
|
import { Status, formToObject, slug } from 'utils/form'
|
||||||
import { writeImg, getImgColor } from 'utils/img'
|
import { writeImg, getImgColor } from 'utils/img'
|
||||||
import { handleComplete } from 'integrations/requestCat'
|
import { handleComplete } from 'integrations/requestCat'
|
||||||
import { CreateAlbum } from 'schemas/album'
|
import { CreateAlbum } from 'schemas/album'
|
||||||
|
|
@ -17,10 +17,10 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
||||||
let body
|
let body
|
||||||
try {
|
try {
|
||||||
const formData = await request.formData()
|
const formData = await request.formData()
|
||||||
const data = formData.get('data') as string
|
const formObject = formToObject(formData)
|
||||||
const cover = formData.get('cover')
|
const { data, ...rest } = formObject
|
||||||
const formObject = { cover, ...JSON.parse(data) }
|
|
||||||
body = s.create(formObject, CreateAlbum)
|
body = s.create({ ...JSON.parse(data), ...rest }, CreateAlbum)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return Status(422, (err as Error).message)
|
return Status(422, (err as Error).message)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,3 +2,13 @@ import slugify from 'slugify'
|
||||||
|
|
||||||
export const Status = (status: number, statusText?: string) => new Response(null, { status, statusText })
|
export const Status = (status: number, statusText?: string) => new Response(null, { status, statusText })
|
||||||
export const slug = (text: string) => slugify(text, { lower: true, strict: true })
|
export const slug = (text: string) => slugify(text, { lower: true, strict: true })
|
||||||
|
|
||||||
|
export function formToObject(formData: FormData) {
|
||||||
|
const object: Record<string, any> = {}
|
||||||
|
for (const entry of formData.entries()) {
|
||||||
|
const [key, value] = entry
|
||||||
|
object[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
return object
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue