Sé que la solicitud de publicación iniciará una solicitud de verificación previa antes de que se envíe la solicitud de publicación real. Así que hice un middleware para manejar todas las comprobaciones previas en Express como este:
/aplicación.js:
const express=require('express'); const preflightRouter=require('./routes/preflight'); const app=express(); app.use(preflightRouter); // * preflightRouter is the middleware handling all the preflight requests. app.post('/post', (req, res)=>{ res.header('Access-Control-Allow-Origin', '*'); res.send('Post requests successful.') }) app.listen(5000, ()=>{ console.log('server running on port 5000'); })/rutas/prevuelo:
const express=require('express'); const router=express.Router(); router.options('/', (req, res)=>{ res.setHeader("Access-Control-Allow-Origin","*") res.setHeader("Access-Control-Allow-Headers", "*"); console.log('Preflight hit.') res.end(); }) module.exports=router;Sin embargo, si cambia la línea * a esto, funciona:
app.use('/post',preflightRouter);Me pregunto por qué tiene que coincidir perfectamente con toda la ruta de la ruta. ¿No es "el middleware montado sin una ruta se ejecutará para cada solicitud a la aplicación" como dice el tutorial express?
Para completar, aquí está el código de la web frontal (puerto frontend 5500, puerto backend 5000):
<html> <head> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <button id='btn'>POST</button> <script> btn.onclick=()=>{ axios.post('http://localhost:5000/post', {name: 'Smith'}) .then(response=>{ console.log(response); }) } </script> </body> </html>