Próbowałem zrobić żądanie poczta z mojej reagującej aplikacji na emulatorze z Androidem, ale obiektem, który wysyłam w ciele prośby, jest podzielony za niezdefiniowany, próbując dużo rozwiązać ten problem, ale bez powodzenia. Proszę pomóż mi

Oto kod do mojej formy w aplikacji znanej jako "API.JS" i nazwano więc tylko do testowania punktów końcowych API

import React, { Component } from "react";
import {
  Text,
  TextInput,
  View,
  TouchableHighlight,
  StyleSheet,
  Button,
  FormData
} from "react-native";
import Permissions from "react-native-permissions";
import ImagePicker from "react-native-image-crop-picker";
import axios from "axios";

var styles = StyleSheet.create({});
var msg = "Select Image";
var data;

export default class API extends Component {
  constructor(props) {
    super(props);
    this.state = {
      name: "",
      price: "",
      size: "",
      description: "",
      image: "",
      popularity: ""
    };
  }
  FormDataFunc() {
    let form = new FormData();
    form.append("name", this.state.name);
    form.append("price", this.state.price);
    form.append("size", this.state.size);
    form.append("description", this.state.description);
    form.append("image", this.state.image);
    form.append("popularity", this.state.popularity);
    return form; 
    return form;
  }
  onChange(e) {
    this.setState({ [e.target.name]: e.target.value });
  }
  Submit() {
    axios({
      method: "post",
      url: "http://192.168.0.102:3000/products",
      data: this.FormDataFunc,
      headers: {
        Accept: "application/json",
        "Content-Type": "application/x-www-form-urlencoded"
      },
      body: this.FormDataFunc
    })
      .then(() => {
        console.log("DONE!");
        this.props.navigation.navigate("offersScreen");
      })
      .catch(err => {
        console.log(err);
        console.log(this.FormDataFunc);
      });
  }
  componentDidMount() {
    Permissions.check("photo").then(response => {
      // Response is one of: 'authorized', 'denied', 'restricted', or 'undetermined'
      console.log(response);
    });
  }

  render() {
    const image = () => {
      ImagePicker.openPicker({
        multiple: false,
        includeBase64: true
      }).then(images => {
        console.log(images);
        this.setState({
          images: { data: `\`${images.mime}\`;base64,\`${images.data}\`` }
        });
        console.log(this.state.images);
        msg = "Selected";
      });
    };
    return (
      <View>
        <TextInput placeholder="Name" name="name" />
        <TextInput placeholder="Price" name="price" />
        <TextInput placeholder="Size" name="size" />
        <TextInput placeholder="Description" name="description" />
        <TouchableHighlight onPress={image} name="image">
          <Text>{msg}</Text>
        </TouchableHighlight>
        <TextInput placeholder="Popularity" name="popularity" />
        <TouchableHighlight title="Submit" onPress={this.Submit}>
          <Text>Send</Text>
        </TouchableHighlight>
      </View>
    );
  }
}

Oto kod do mojej trasy Backend "Product.js", która otrzymuje żądanie (węzeł.js i Express)

const express = require("express");
const router = express.Router();
const bodyParser = require("body-parser");
const path = require("path");
const cloudinary = require("cloudinary");
const mongoose = require("mongoose");

//Product Model

const product = require("../models/product").product;
router.use(bodyParser.json());

//GET route

router.get("/", (req, res) => {
  product.find().then(product => res.json(product));
});

// POST route
cloudinary.config({
  cloud_name: "cloud222",
  api_key: "783935981748815",
  api_secret: "uY47vBS1rI2x5jvFtnXQIjMMqU0"
});

router.post("/", (req, res) => {
  //MISC//
  let imageUrl;
  console.log("starting");
  //MISC//

  //CLOUDINARY UPLOAD
  cloudinary.v2.uploader.upload(req.body.image, (error, result) => {
    if (error) {
      console.log(error);
      console.log(`${req.body.image}`);
    } else {
      imageUrl = result.secure_url;
      //MONGO UPLOAD
      var productv = {
        name: req.body.name,
        price: req.body.price,
        size: req.body.size,
        description: req.body.description,
        image: imageUrl,
        popularity: req.body.popularity
      };
      const productvar = new product(productv);
      productvar
        .save()
        .then(product => console.log(product))
        .then(product => res.json(product))
        .catch(err => console.log(err));
    }
  });

  //END//
});

module.exports = router;

Dane są rejestrowane jako niezdefiniowane, a zatem żądanie nie otrzymuje odpowiedzi

0
frost98 21 luty 2019, 18:30

2 odpowiedzi

Najlepsza odpowiedź

Problem rozwiązany

Musiał użyć onChangeText = zamiast onChange, jak onChange nie zwraca ciąg

0
frost98 23 luty 2019, 19:51

Myślę, że problemem jest stworzyłeś formularz i chciałeś go opublikować, ale dodane nagłówki są "aplikacja / JSON". Powinieneś to zmienić:

 headers: {
         'content-type': 'multipart/form-data',
         'Accept':'multipart/form-data',
      },

Mam nadzieję, że to działa dla Ciebie.

0
qloveshmily 21 luty 2019, 16:16