Tengo una aplicación de muestra de reacción que debería publicar datos en nodejs, el código en el lado de reacción se ve así:
export const RegisterUser = async (user, userContext) => { fetch('http://localhost:3001/user/register', { method: "POST", headers: { "Content-Type": "application/json", "Accept": "application/json" }, body: JSON.stringify({ username: "mjaberster", fullName: "Marwan Jaber", password: "P@$$w0rd1234", email: "mjaberster@gmail.com", phoneNumber: "+972532203407" }), mode: 'no-cors' }).then((res) => { console.log(`Trying to convert response to JSON ${JSON.stringify(res)}`) if(res.ok) { res.json().then(data => { console.log(JSON.stringify(data)) return JSON.stringify(data) }) } else { console.log(res.status) console.log(res.statusText) return `User failed to register due to an error (${res.status}, ${res.statusText}` } }).catch(err => { userContext.loginMsg= err.message userContext.loginStatus= err.status userContext.token= null console.log(`User failed to register due to an error (${err.message}, ${err.status}`) return `User failed to register due to an error (${err.message}, ${err.status}` }) }y el código en el nodo se ve así:
server.use(express.json()) server.post(`/user/register`, async (req, res) => { const user = req.body console.log(`>>>> ${user}`) if(!user) { const err = new Error("User must be submited") err.status = 400 throw err } const addedUser = await MongooseConnector.addUser(user) if(addedUser) { res.json({message: "User has been added successfuly"}) } else { res.status(500).json({message: "An error occured, couldn't create user, please try again later"}) } })Cuando envío el mismo objeto de cuerpo del cartero, obtengo el resultado esperado. Cuando envío la solicitud con el mismo cuerpo de reacción, obtengo: en el registro del nodo:
>>>> undefined undefineden el registro de reacción: POST http://localhost:3001/user/register net::ERR_CONNECTION_REFUSED
Me estoy volviendo loco, ayuda por favor :(
Dijiste mode: 'no-cors' lo que hace que fetch elimine silenciosamente cualquier cosa que requiera permisos CORS. Esto incluye configurar el Content-Type para una solicitud con formato JSON.
Dado que el cliente no le dice al servidor que el cuerpo es JSON, el middleware de análisis del cuerpo no lo está analizando.
No use mode: 'no-cors' .
Acabo de cambiar de fetch a axios, ¡y todo funcionó bien! Aquí esta lo que hice:
var axios = require('axios'); var data = JSON.stringify({ "username": user.username, "fullName": user.fullName, "password": user.password, "email": user.email, "phoneNumber": user.phoneNumber }); var config = { method: 'post', url: 'http://localhost:3001/user/register', headers: { 'Content-Type': 'application/json' }, data : data }; axios(config) .then(function (response) { console.log(response.data.message); }) .catch(function (error) { console.log(error); });No estoy seguro de cuál es la razón por la que la función de búsqueda me está haciendo esto, ¡pero tal vez tenga un error!