React Native post to Node.js/Express

Issue

I am triying to make a post query from my React Native (expo) app to Node.js server (express). And the post is doing nothing. Even, console.log doesnot work. Please, need your help with this
React Native App code:

        const options = {
            method: 'POST',
            timeout: 20000,
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            body: JSON.stringify({
                a: 10,
                b: 20
            })
        };
        fetch(url, options)
        .then(response => {
            console.log(response.status);
        })
        .catch(error => console.error('timeout exceeded')); 

        console.log('3232');

And node.js code:

var express = require('express');
/// create express app
var app = express();
app.use(express.json());

app.post('/g_data/auth', function(req, res){
    console.log('LOGGED')
    res.send('Hello World!')
});

React Native console return : "3232"

node.js console return nothing

No "new incoming connection detected from …", "LOGGED", as expected.

Please help, what I am doing wrong?

Solution

Ok! the final solution is in wrong Headers. For some reasons, React Native app send Headers:
'Content-Type': 'application/json;charset=UTF-8'
But node.js server receives:
'Content-Type': 'text/plain;charset=UTF-8'

So, first, I have installed cors to server, npm i cors -save and for some reason left Body Parser, and a little bit modernize headers. Here is a final code:
React Native App:

let formdata = '["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]';
        ///console.log(formdata);
        const url = 'http://192.168.88.15:7935/g_data/auth';
        const options = {
            method: 'POST',
            timeout: 20000,
            mode:'cors',
            headers: {
                'Content-Type': 'application/json; charset=utf-8',
            }, 
            body: formdata
        };
        fetch(url, options)
        .then((response) => response.json())
        /// make design
        setLoading(false);
        /// next code
        console.log('next!');

The server code is:

var express = require('express');
var cors = require('cors')
var bodyParser = require('body-parser');
/// create express app
var app = express();
/// use cors
app.use(cors())
/// use body req parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.post('/g_data/auth', function(req, res){
    console.log(req.body)
    res.send({Message: 'Hello World!'})
});

app.listen(7935);
console.log('listen port 7935');

Answered By – 789087

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published