Как мы можем получить данные поста из функции выборки в реагировать родной для выражения API? - PullRequest
0 голосов
/ 04 июня 2018

Вопрос:

Как мы можем получить данные поста из функции извлечения в реагировать нативно, чтобы выразить API?

Столкнулся с проблемой:

Я попробовал следующий процесс, но не получил эти переменные во внутреннем API.

Как получить переменные в бэкэнд-API?Любые предложения приветствуются.

Вот реактивная функция нативной выборки:

РЕАКЦИОННАЯ ФУНКЦИЯ ПОЛУЧЕНИЯ РЯДА:

 login = async () => {

   await fetch('http://192.168.1.160:8001/api/login', {
          method: 'POST',
          mode: 'cors',
          cache: 'default',
          header: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
          },

          body: JSON.stringify({
              email: this.state.email,
              password: this.state.password
          })
    })
    .then ((response) =>  response.json())
    .then ((res) => {//console.log(res);
        if(res.error === false){
            AsyncStorage.setItem('user', res.data);
            this.props.navigation.navigate('profile');
        } else{
           // alert(res.message);
        }
    })

  }

Экспресс-API:

Экспресс API приведен ниже:

    module.exports = function (req, res) {
console.log('TEST',req.body);
  let { email, password } = req.body;

  let input = { email, password };

  const validator = loginValidator(input);

  if (validator.error) {

    return res.status(400).json({
      error: true,
      message: validator.error.details,
    });

  } else {

    models.users.findOne({
      where: { email: email }
    }).then(user => {

      if (!user) {
        return res.status(400).json({
          error: true,
          message: {
            key: 'email',
            text: MessageHelper.email_already_exist
          }
        });

      } else if (!bcrypt.compareSync(password, user.password)) {

        return res.status(400).json({
          error: true,
          message: {
            key: 'password',
            text: MessageHelper.password_not_valid
          }
        });

      } else {

         var token = jwt.sign({ userid: user.id },Config.get('jwt.privatekey'));
          models.users.update({ token: token },{ where: { id: user.id } }).then(function(result){ 
                return res.json({
                    error: false,
                    message: MessageHelper.user_token_updated,
                   token: token,  
                   data: {
                        user_id: user.id,
                        firstname: user.firstname,
                        lastname: user.lastname,
                        username:user.username,
                        email: user.email,
                        mobile: user.mobile,
                        token: user.token
                        }
                });
            }).catch(function(error){
                return res.status(400).json({
                    error: true,
                    message: error
                });
            })

      }

    });

  }

}

1 Ответ

0 голосов
/ 04 июня 2018

Fetch также принимает необязательный второй аргумент, который позволяет настроить HTTP-запрос.Вы можете указать дополнительные заголовки или сделать запрос POST:

fetch('https://mywebsite.com/endpoint/', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    firstParam: 'yourValue',
    secondParam: 'yourOtherValue',
  }),
});

Работа в сети является асинхронной по своей природе.Методы выборки возвращают Promise, что упрощает написание кода, который работает асинхронно:

function getMoviesFromApiAsync() {
  return fetch('https://facebook.github.io/react-native/movies.json')
    .then((response) => response.json())
    .then((responseJson) => {
      return responseJson.movies;
    })
    .catch((error) => {
      console.error(error);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...