2016-12-07 3 views
1

Я пытаюсь отправить простой POST Forms React Native Fetch request от Android-эмулятора до NodeJS-сервер. Сервер NodeJS не обнаруживает этого (работает с помощью Postman api). Пожалуйста, помогите мне :)React Native Form request

Server.js:

var express = require('express'); 
var app = express(); 

var accs = []; 

var server = app.listen(8082, function() { 
    var host = server.address().address 
    var port = server.address().port 

    console.log("Example app listening at http://%s:%s", host, port) 
}) 

app.post('/register', function(req, res) { 
    console.log("here"); 
    let login = req.query.login; 
    let password = req.query.password; 
    accs.push({login: hashCode(login), password: hashCode(password)}) 
    console.log(login + " " + password); 
    res.send("Created: L:" + hashCode(login) + " P:" + hashCode(password)); 
}) 

Реагировать Родной Fetch:

registerAcc() { 
    var details = { 
    'login': 'Login', 
    'password': 'Password!', 
    }; 

    var formBody = []; 
    for (var property in details) { 
    var encodedKey = encodeURIComponent(property); 
    var encodedValue = encodeURIComponent(details[property]); 
    formBody.push(encodedKey + "=" + encodedValue); 
    } 
    formBody = formBody.join("&"); 

    fetch('http://localhost:8082/register', { 
    method: 'POST', 
    headers: { 
     'Accept': 'application/json, application/xml, text/plain, text/html, *.*', 
     'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' 
    }, 
     body: formBody 
    }).then((response) => { 
     this.setState({msg : "1"}) 
    }).catch((error) => { 
     this.setState({msg : '2'}); 
    }); 
    } 

Эмулятор также показывают общения:

Возможные Unhandled Promise засечки (идентификатор : 0): Запрос сети не удалось ...

Но функция улова предусмотрена.

ответ

0

Когда вы используете «localhost» в Android Emulator, это относится к мобильному телефону, а не к компьютеру.

Вы можете заменить localhost на «10.0.2.2» в приложении, это псевдоним для хоста эмулятора Android, который в вашем случае - ваш компьютер.

См: https://developer.android.com/studio/run/emulator-commandline.html#networkaddresses

Или

Получить адрес сети, и вы можете запустить на своем мобильном телефоне тоже (если в одной сети). В Windows используйте команду ipconfig в CMD, чтобы получить сетевой адрес IPv4.

+1

Большое вам спасибо! Для меня это работает с Ipv4 – kapuchaster