Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
926 connectés 

  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  [Javascript - Nodejs - Mongoose] Problème Fetch PUT form-data

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Javascript - Nodejs - Mongoose] Problème Fetch PUT form-data

n°2430608
Profil sup​primé
Posté le 28-10-2022 à 20:12:29  answer
 

Je serre. Mon problème alors. Je fais une requête Fetch pour mettre à jour ma base de données se trouvant chez MongoDB, cela fonctionne parfaitement en Content-Type: application/json, mais pas lorsque je veux utiliser FormData() pour l'envoi ensuite d'images.
 
Mon code côté front (React) :  
 

Code :
  1. function ModalPageMyProfile() {
  2.   const authContext = useContext(AuthContext)
  3.   const [dataResult, setDataResult] = useState({})
  4.         const regexFormChangeFirstName = (e) => {
  5.          
  6.           const newDataResult = {...dataResult}
  7.           newDataResult.firstname = e.target.value
  8.           setDataResult(newDataResult)
  9.          
  10.         RegexFunctionChange.infoInvisible('#signUpFirstName', '#alertInfoFirstName', '#alertInfoArrowFirstName', 'alertInfoMinLetterInvisible', 'alertInfoFirstNameMinLetterVisibleModalMyProfile',
  11.             'alertInfoArrowInvisible', 'alertInfoFirstNameArrowVisibleModalMyProfile')   
  12.         RegexFunctionChange.firstName('#signUpFirstName')
  13.             // if (e.target.value.match(/^[a-zA-Z-]{2,25}$/)) {
  14.             // valueFirstName = e.target.value  
  15.             // console.log(valueFirstName)     
  16.             // }  
  17.             // else {
  18.             // valueFirstName = null
  19.             // }
  20.         }
  21.        
  22.         const regexFormChangeLastName = (e) => {
  23.          
  24.           const newDataResult = {...dataResult}
  25.           newDataResult.lastname = e.target.value
  26.           setDataResult(newDataResult)
  27.          
  28.        
  29.             RegexFunctionChange.infoInvisible('#signUpLastName', '#alertInfoLastName', '#alertInfoArrowLastName', 'alertInfoMinLetterInvisible', 'alertInfoLastNameMinLetterVisibleModalMyProfile',
  30.                 'alertInfoArrowInvisible', 'alertInfoLastNameArrowVisibleModalMyProfile')   
  31.             RegexFunctionChange.lastName('#signUpLastName')
  32.        
  33.        
  34.             // if (e.target.value.match(/^[a-zA-Z-]{2,25}$/)) {
  35.             // valueLastName = e.target.value   
  36.             // }  
  37.             // else {
  38.             // valueLastName = null
  39.             //}
  40.         }
  41. const formData = new FormData()
  42. const dataObject = {...dataResult}
  43. formData.append('infosUser', JSON.stringify(dataObject))
  44. //formData.append('Authorization', `Bearer ${authContext.token}`)
  45. console.log(formData.get('infosUser'))
  46. const fetchPut = () => {
  47.   if (dataResult.firstname.match(/^[a-zA-Z-]{2,25}$/) &&
  48.       dataResult.lastname.match(/^[a-zA-Z-]{2,25}$/)) {
  49.     // const fetchHandlerUpdate = async () => {
  50.     //   const response = await  
  51.       fetch(urlPut,
  52.         {
  53.           method: 'PUT',
  54.           headers: {
  55.             //'Content-Type': 'application/json',
  56.             'Accept': 'application/json',
  57.             'Authorization': `Bearer ${authContext.token}`
  58.           },
  59.           body: formData
  60.           })
  61.           .then( response => response.json())
  62.           .then ( data => console.log(data))
  63.           // const data = await response.json( );
  64.           // if(response.ok) {
  65.           //   console.log(data)
  66.           // }
  67.          
  68.     } 
  69.   //   fetchHandlerUpdate()
  70.   // }
  71. }
  72.   return (
  73.         <DivNameProfile>
  74.         <DivNameInput>
  75.          
  76.         <input name={'firstName'} placeholder={dataResult.firstname} value={dataResult.firstname || ' '} id={'signUpFirstName'} className={'inputsNameMyProfile input'} onBlur={regexBlurFirstName} onChange={regexFormChangeFirstName}></input>
  77.        
  78.         </DivNameInput>
  79.         <DivNameInput>
  80.        
  81.         <input name={'lastName'} placeholder={dataResult.lastname} value={dataResult.lastname || ' '} id={'signUpLastName'} className={'inputsNameMyProfile input'}  /*onFocus={() => test()}*/ onBlur={regexBlurLastName} onChange={regexFormChangeLastName}></input>
  82.        
  83.         </DivNameInput>
  84.         </DivNameProfile>
  85. <ButtonValidation onClick={() => fetchPut()}/>
  86. )
  87. }


 
 
Rendus console côté front (le state se met à jour nickel :

Code :
  1. {"_id":"6357f144a5ac260a67a5a9c9","firstname":"Jzaaaeeedd","lastname":"Jza","email":"jerome@truc.fr","password":"$2b$10$LY7dWK65f9Xs1PKD8Oy.c./OJZy1rPfNturFRGlaYQW0hzelNK0FS","bioProfile":"","city":"","imageUrlProfilePicture":"","imageUrlLandscapePicture":"","admin":false,"__v":0}
  2. {message: 'Objet modifié !'}


 
 
Middleware côté back :  

Code :
  1. exports.modifyInfosUser = (req, res) => {
  2.     const userObject = req.file ? {
  3.         ...JSON.parse(req.body.infosUser),
  4.         imageUrlProfilePicture: `${req.protocol}://${req.get('host')}/images/${req.file.filename}`
  5.     } : { ...req.body };
  6.     console.log(req.body.infosUser)
  7.     delete userObject.userId;
  8.     User.findOne({ _id: req.params.id})
  9.     .then((user) => {
  10.         if ( user._id != req.auth.userId) {
  11.             res.status(401).json({ message:'Non-autorisé' })
  12.         } else {
  13.             User.updateOne({ _id: req.params.id }, { ...userObject, _id: req.params.id }, {returnNewDocument: true}/*, {returnOriginal:false}*/)
  14.             .then(() => res.status(200).json({ message: 'Objet modifié !' }))
  15.             .catch((error) => res.status(403).json({ error }));
  16.             console.log(req.body)
  17.         }
  18.     })
  19.     .catch((error) => res.status(400).json({ error }))
  20. }


 
Rendus console côté back :  

Code :
  1. {
  2.   userId: '6357f144a5ac260a67a5a9c9',
  3.   iat: 1666973805,
  4.   exp: 1667002605
  5. }
  6. {"_id":"6357f144a5ac260a67a5a9c9","firstname":"Jzaaaeeedd","lastname":"Jza","email":"jerome@truc.fr","password":"$2b$10$LY7dWK65f9Xs1PKD8Oy.c./OJZy1rPfNturFRGlaYQW0hzelNK0FS","bioProfile":"","city":"","imageUrlProfilePicture":"","imageUrlLandscapePicture":"","admin":false,"__v":0}


 
 
Et mes CORS :  

Code :
  1. app.use((req, res, next) => {
  2.     // res.setHeader('Access-Control-Allow-Origin', '*');
  3.     // res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
  4.     // res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
  5.     res.header("Access-Control-Allow-Origin", "*" );   
  6.     res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
  7.     res.header("Access-Control-Allow-Headers", "X-Requested-With, X-HTTP-Methods-Override, Content-Type, Accept,Cache-Control, Pragma, Origin, Authorization, Content-Type, form-data" );
  8.     res.header("Access-Control-Allow-Credentials", "true" );
  9. if ('OPTIONS' == req.method){
  10.     return res.send(200);
  11. }
  12.     next();
  13. });
  14. app.use(express.json());
  15. app.use('/', usersRoutes)
  16. app.use('/images', express.static(path.join(__dirname, 'images')));
  17. app.use(express.urlencoded({ extended: true }));
  18. module.exports = app;


 
Voilà, plus de deux jours sur ça comme un noob, en faisant recherche sur recherche, test sur test, sans trouver l'origine du truc.
 
Toute aide est plus que la bienvenue

mood
Publicité
Posté le 28-10-2022 à 20:12:29  profilanswer
 

n°2430620
rufo
Pas me confondre avec Lycos!
Posté le 28-10-2022 à 23:09:45  profilanswer
 

Pour les images, faudrait pas mettre "multipart/form-data" plutôt que application/json ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2430621
Profil sup​primé
Posté le 29-10-2022 à 00:14:35  answer
 

Tout à fait, de ce que j'ai compris du moins. Faut juste pas marqué "Content-Type": "application/json", ça le fait automatique. Je cherche encore sans rien comprendre.

n°2430845
Profil sup​primé
Posté le 01-11-2022 à 15:10:23  answer
 

Problème résolu. Je donne la solution plus tard pour qui pourrait avoir besoin, pas trop le temps là.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  [Javascript - Nodejs - Mongoose] Problème Fetch PUT form-data

 

Sujets relatifs
problème de récupération de texte avec une fonctionProblème affichage avec tablette
Divers - problème de formulaire HTML / CSS / JS[Ada][Adacore] Problème d'édition de lien avec GPS
Exercice html, php, mysql, javascriptproblème avec Sublime Text sur Mac
Probleme d'edition d'image dans DjangoProbleme de Cookies
Mediawiki : pb avec génération de javascript dans un articleProbleme d affichage dans un iframe
Plus de sujets relatifs à : [Javascript - Nodejs - Mongoose] Problème Fetch PUT form-data


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR