El siguiente código es mi método de búsqueda en mi registro separado.js. Este es mi archivo js recién creado, por lo que puedo crear mi interfaz. Por el momento, solo intento consolar. registrar el resultado final de esta recuperación, pero no puedo obtener el resultado porque recibo un error cuando intento PUBLICAR esto.
error en la consola del navegador: "No detectado (en promesa) SyntaxError: Token S inesperado en JSON en la posición 0"
fetch(`${rootUrl}api/users/register`,{ method:"POST", headers:{ "Content-Type": "application/json" }, body:JSON.stringify({ firstName: firstName, lastName: lastName, mobileNo: mobileNo, email: email, password: password }) }) .then(result=>result.json()) .then(result =>{ console.log(result); })En userRouter.js, esta es la ruta que busco en register.js arriba:
router.post('/register', (req, res)=>{ userController.register(req.body).then(result => res.send(result))})Y la ruta conduce a este controlador en Usercontroller.js:
module.exports.register = (reqBody)=>{ //check if email already exists before registering new user return User.find({email: reqBody.email}).then((result, error) =>{ if(result.length != 0){ return "EMAIL EXISTS!"; }else{ let newUser = new User({ firstName: reqBody.firstName, lastName: reqBody.lastName, email:reqBody.email, password: bcrypt.hashSync(reqBody.password, 10), mobileNo: reqBody.mobileNo }) return newUser.save().then((result, error)=>{ if (error){ return error; }else{ return "SUCCESFULLY REGISTERED NEW USER"; } }) } })}Como puede ver, este es un formulario de registro. Todo funciona bien en el backend, usando cartero para ingresar valores. Todos mis avisos de condición están siendo devueltos (existen correos electrónicos, registro exitoso).
Pero cuando traté de crear una interfaz para él, no puedo obtener mis avisos definidos. Al igual que cuando ingreso deliberadamente un correo electrónico duplicado, no puedo obtener el mensaje "El correo electrónico existe" que solía recibir cuando usaba solo cartero o simplemente funcionalidad de la API de back-end.
Siento que algo está muy mal con lo que estoy tratando de hacer. Tengo problemas para crear una interfaz para mi API que no estoy usando en este momento.
Está devolviendo una respuesta que no es JSON, por lo que no puede usar res.json(). Simplemente está enviando una respuesta de texto. Así que usa res.text()
fetch('/your-endpoint').then((res)=>{ return res.text(); }).then((text)=>{ console.log(text) })Hay algunos indicios que señalar.
Verifique rootUrl ya que después de eso no hay una foreslash .
Estás devolviendo el estilo de texto . use esto en su lugar para tener el resultado en formato json .
res.status(200).json({result})
Trate de no usar Funcionalidades sincrónicas en la parte posterior. Debería evitarlo, o más bien, usar bcrypt.hash() mezclado con Async Function para eliminar la CallBack Function hasta que se haga. Además, para verificar el error de la función anterior para obtenerlo en la parte frontal usando Fetch / Axios. utilice el método Try/Catch .
Yo usaría axios [ axios.request({}) | axios.post(..) ] si yo estuviera en tu lugar.