Quiero configurar una ruta POST en mi carpeta api usando next.js, y estoy enviando los datos a la ruta pero no puedo analizar los datos para guardarlos en la base de datos. ¿Cuál es la mejor manera de manejar las rutas POST en next.js? particularmente analizando los datos en formato JSON ?
Para que las solicitudes POST funcionen en las rutas API de Next.js, es probable que desee hacer 3 cosas.
POSTJSON.parse() para analizar el JSON en la rutaLas rutas API en Next.js admiten de forma predeterminada todos los tipos de solicitudes, incluidas GET, POST, DELETE, etc. Por lo tanto, si bien no es necesario, es una buena idea restringir la ruta a los métodos que desea admitir.
En su caso, si solo desea admitir solicitudes POST en una ruta determinada, use req.method para filtrar las solicitudes que no son posteriores.
if (req.method !== 'POST') { res.status(405).send({ message: 'Only POST requests allowed' }) return } Para analizar el JSON, todo lo que puede usar JSON.parse() .
const body = JSON.parse(req.body)Póngalo todo junto, y su ruta API debería verse así:
// pages/route-name.js export default function handler(req, res) { if (req.method !== 'POST') { res.status(405).send({ message: 'Only POST requests allowed' }) return } const body = JSON.parse(req.body) // the rest of your code }Por último, debe enviar una solicitud POST desde su código de front-end al backend. Es posible que ya sepa cómo hacer esto, pero mencione esto para completar.
fetch('/api/route-name', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(objectWithData), }) Aparte rápido, no necesita preocuparse por la compatibilidad entre navegadores para fetch con Next.js. Next.js agrega automáticamente un polyfill cuando es necesario .
Como en todo, depende. En Next.js v12, no necesita JSON.parse(req.body) en la ruta de la API, siempre que NO haya establecido explícitamente bodyParser: false en la configuración exportada para la ruta de la API (consulte https://nextjs.org /docs/api-routes/api-middlewares ). El req.body se analizará automáticamente en un objeto, por ejemplo, si el content-type de la solicitud es application/json . En este caso, dado que el contenido se analiza previamente en un objeto, intentar ejecutar JSON.parse(req.body) en la API probablemente generará un error.