Soy 90% esto es un problema de CORS, pero incluso después de seguir todos los consejos que encontré en línea, no he podido resolverlo.
Estoy tratando de hacer una solicitud POST desde mi interfaz (para hacer las cosas más rápido, acabo de hacer solicitudes desde la consola). Aquí hay una solicitud que estoy haciendo:
fetch('http://localhost:4000/api/post', { method: 'POST', mode: 'cors', Headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({path: "meep"}) })En mi aplicación Node/Express, estoy registrando en la consola el req.body, pero no obtengo nada a menos que envíe la solicitud desde Paw (alternativa de Postman).
Aquí está mi archivo index.js principal
const express = require('express') const mongoose = require('mongoose') const routes = require('./routes/routes') const cors = require('cors') require('dotenv').config() const app = express() app.use(cors()); app.use(express.json()) app.use(function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "*") next(); }); const mongoString = process.env.DATABASE_URL const port = process.env.PORT || 4000 mongoose.connect(mongoString) const database = mongoose.connection database.on('error', (erorr) => { console.log(error) }) database.once('connected', () => { console.log('Database connected.') }) app.listen(port, () => { console.log(`Server listening at ${port}`) }) app.use('/api', routes)Y aquí está mi archivo de rutas:
const express = require('express') const router = express.Router() const Model = require('../models/model') const cors = require('cors') router.use(cors()); router.use(express.json()) router.use(function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "*") next(); }); // Post Method router.post('/post', async (req, res) => { console.log(req.body) const data = new Model({ isFeatured: req.body.isFeatured, path: req.body.path, /* recipe: { ingredients: req.body.recipe.ingredients, amount: req.body.recipe.amount, notes: req.body.recipe.notes } */ }) try { const dataToSave = await data.save() res.status(200).json(dataToSave) } catch (error) { res.status(400).json({ message: error.message }) } }) module.exports = router¿Alguna idea de lo que podría estar haciendo mal?
de @heiko-theißen:
Reemplace los
Headersconheadersen su comando defetch. LosHeadersse ignoran, por lo que no está enviandoContent-Type: application/jsonyexpress.json()no entra en acción
Esto lo arregló.