Deberá aislar el problema verificando primero que su punto de servicio esté habilitado para CORS. Para centrarme únicamente en la funcionalidad CORS, eliminaría el código MySQL temporalmente.
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
app.use(cors());
app.get('/', function(req, res){
var root = {};
root.status = 'success';
root.method = 'index';
var json = JSON.stringify(root);
res.send(json);
});
app.post('/cors', function(req, res) {
var root = {};
root.status = 'success';
root.method = 'cors';
var json = JSON.stringify(root);
res.send(json);
})
// Start the server
app.listen(3300, () => {
console.log('Listening on port 3300');
});
Una vez que tenga un servidor escuchando en el puerto 3300, ejecute el siguiente comando PREFLIGHT en la terminal.
curl -v \
-H "Origin: https://example.com" \
-H "Access-Control-Request-Headers: X-Custom-Header" \
-H "Acess-Control-Request-Method: POST" \
-X OPTIONS \
http://localhost:3300
Si la solicitud de verificación previa tiene éxito, la respuesta debe incluir Access-Control-Allow-Origin, Access-Control-Allow-Methods y Access-Control-Allow-Headers
Ahora ejecute el método POST.
curl -v \
-H "Origin: https://example.com" \
-H "X-Custom-Header: value" \
-X POST \
http://localhost:3300/cors
Si la solicitud de publicación es exitosa, la respuesta debe incluir Access-Control-Allow-Origin
Si todo se ve bien, su servidor está bien. Luego debe probar el método de publicación desde su aplicación iOS.
NOTA. También sospecharía de usar cors en localhost. Asignaría 127.0.0.1 a un dominio y luego haría que la aplicación usara ese dominio en su lugar. Si está en Linux o Mac, modifique /etc/hosts. Para Windows es c:\windows\system32\drivers\etc\hosts