es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer una solicitud POST desde Flutter a la API REST de Amplify.

De acuerdo con la documentación de inicio de Amplify Flutter REST API, la solicitud POST generada automáticamente a continuación para ExpressJS resulta en el siguiente error:

SyntaxError: Token inesperado ‘ en JSON en la posición 1
en JSON.parse

La solicitud GET se devuelve correctamente, pero al cambiar a POST y agregar el campo body a continuación desde la documentación, se devuelve el error. ¿Cómo se puede llamar exitosamente una solicitud POST desde Flutter utilizando la REST API de Amplify?

Solicitud GET de Flutter – (sin error)

Future<void> callAPI() async {
  try {
    RestOptions options = RestOptions(
        path: '/example',
        apiName: 'ExpressJSRESTAPI'
    );
    RestOperation restOperation = Amplify.API.get(
        restOptions: options
    );
    RestResponse response = await restOperation.response;
    print('La solicitud GET fue exitosa');
    print(new String.fromCharCodes(response.data));
  } on ApiException catch (e) {
    print('La solicitud GET falló: $e');
  }
}

Solicitud POST de Flutter (lanza error)

Future<void> callAPI() async {
  try {
    RestOptions options = RestOptions(
        path: '/example',
        body: Uint8List.fromList('{"name":"Mow the lawn"}'.codeUnits),
        apiName: 'ExpressJSRESTAPI'
    );
    RestOperation restOperation = Amplify.API.post(
        restOptions: options
    );
    RestResponse response = await restOperation.response;
    print('La solicitud POST fue exitosa');
    print(new String.fromCharCodes(response.data));
  } on ApiException catch (e) {
    print('La solicitud POST falló: $e');
  }
}

Ruta de solicitud GET de ExpressJS

app.get('/example', function(req, res) {
  // Agrega tu código aquí
  res.json({success: '¡La llamada GET fue exitosa!', url: req.url});
});

Ruta de solicitud POST de ExpressJS

javascript
app.post('/example', function(req, res) {
// Agrega tu código aquí
res.json({success: '¡La llamada POST fue exitosa!', url: req.url, body: req.body})
});

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error “SyntaxError: Unexpected token ‘ en JSON en la posición 1” suele ocurrir cuando la respuesta del servidor no es un JSON válido. En este caso, es probable que el error se esté produciendo debido a la forma en que se está formateando el cuerpo de la solicitud POST.

    Para llamar correctamente a una solicitud POST desde Flutter utilizando la API REST de Amplify, asegúrate de que el cuerpo esté correctamente formateado como un objeto JSON. Una forma de hacer esto es utilizar la función jsonEncode() proporcionada por la biblioteca dart:convert. Aquí tienes un ejemplo:

    import 'dart:convert';
    
    Future<void> callAPI() async {
      try {
        final data = {'name': 'Cortar el césped'};
        final body = jsonEncode(data);
        final options = RestOptions(
          path: '/ejemplo',
          body: Uint8List.fromList(body.codeUnits),
          apiName: 'ExpressJSRESTAPI',
        );
        final restOperation = Amplify.API.post(restOptions: options);
        final response = await restOperation.response;
        print('La llamada POST se realizó con éxito');
        print(utf8.decode(response.data));
      } on ApiException catch (e) {
        print('La llamada POST falló: $e');
      }
    }
    

    En el ejemplo anterior, creamos un objeto JSON simple con una propiedad name y lo codificamos utilizando jsonEncode(). Luego convertimos la cadena resultante en un Uint8List y la pasamos como parámetro body para la solicitud POST de la API REST. Finalmente, utilizamos utf8.decode() para convertir los datos de respuesta de nuevo a una cadena para imprimirlos.

    Con los cambios anteriores, la solicitud POST debería tener éxito y la respuesta del servidor debería ser analizada correctamente como JSON.

Comments are closed.