Quiero mandar un archivo CSV desde una aplicación de React.js a un servidor de Node.js y después trabajar con ese CSV en el servidor.
No sé cómo conectar la aplicación React y el servidor Node.js. En mi aplicación React tengo una entrada con type=”file” donde subo mi archivo CSV y luego presiono el botón para enviar este archivo al servidor Node.js.
Actualización:
Mi código de servidor:
“`
var express = require('express');
var app = express();
const bodyParser = require("body-parser");
const CsvUpload = require("express-fileupload");
app.use(CsvUpload());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use('/EXPRESSENDPOINT',
(req, res, next) => { console.log(req.body)});
app.listen(8080, () => {
console.log('¡Aplicación escuchando en el puerto 8080!');
});
<code>
Mi App.js:
</code>
import './App.css';
import React, { useState, useEffect } from "react";
import axios from 'axios'
function App() {
const [csvFile, SetCsvFile] = useState();
return (
<div className="App">
<header className="App-header">
<div>
Seleccionar archivo
<input type="file" name="file" onChange={e => {
SetCsvFile(e.target.files)
const formData = new FormData();
formData.append('name', "NOMBREDELARCHIVO");
formData.append('file', csvFile);
<pre><code> const url = 'http://localhost:8080/EXPRESSENDPOINT';
axios({
method: 'POST',
url: url,
headers: {
ContentType: 'multipart/form-data'
},
body: formData
})
.then(res => console.log(res))
.catch(err => console.log(err));
}} />
</div>
</header>
</div>
);
export default App;
“`
davy.ai
Para conectar tu aplicación React a tu servidor Node.js, necesitarás hacer una petición HTTP POST desde tu aplicación React a tu servidor. Sigue los siguientes pasos:
import axios from 'axios';
En tu archivo App.js, crea una variable de estado para almacenar el archivo CSV cargado. Puedes hacer esto agregando la siguiente línea al comienzo de tu componente de función:
const [csvFile, setCsvFile] = useState(null);
Esta variable de estado almacenará el objeto de archivo devuelto por el campo de entrada.
En tu campo de entrada, agrega un atributo
onChange
para capturar el objeto de archivo y almacenarlo en la variable de estadocsvFile
. Puedes hacer esto actualizando el campo de entrada existente de la siguiente manera:onChange
, crea un nuevo objetoFormData
para contener los datos del archivo y cualquier dato adicional que desees enviar. Puedes hacer esto agregando las siguientes líneas dentro del controlador de eventos:Reemplaza
NOMBREARCHIVO
con el nombre deseado de tu archivo.Ahora que tienes los datos del archivo listos para enviar, puedes usar axios para hacer una solicitud HTTP POST a tu servidor Node.js. Puedes hacer esto agregando las siguientes líneas dentro del mismo controlador de eventos:
Reemplaza
EXPRESSENDPOINT
con el punto final deseado en tu servidor Node.js.Finalmente, en tu servidor Node.js, necesitas agregar middleware para manejar la carga de archivos. Puedes hacer esto agregando las siguientes líneas al comienzo de tu código de servidor:
Reemplaza
app
con el nombre de tu instancia de aplicación express.Para probar tu conexión, ejecuta tu servidor Node.js y tu aplicación React, y trata de cargar un archivo CSV. Deberías ver los datos del archivo registrados en la consola de tu servidor, y deberías ver una respuesta exitosa registrada en la consola de tu navegador.