Обновление API не работает (требуются аргументы) Reactjs - PullRequest
0 голосов
/ 26 октября 2019

Цель: мне нужно обновить введенный текст и сохранить его в БД.

Когда администратор хочет изменить информацию пользователя, он выбирает строку и нажимает на нее, он перенаправляется на другую страницу, где онможете обновить эту строку пользовательской информации. на этой странице есть текст (электронная почта, nom, prenom, tel) в качестве вводного текста.

После того, как он сделал свои модификации, он нажал на MODIFY, и именно это Обновление мне нужно сделать

Это мой внутренний код:

/**
 * PUT /api/updateaccount
 */
exports.updateaccount = (req, res) => {
    const errors = validationResult(req);
    if(errors.isEmpty()){
        try{
            var token = logHelper.getToken(req,res);
            if(typeof token !== 'undefined'){
                //check token
                jwt.verify(token,'secretKey', (err,authData) => {
                    if(err){
                        resultats = {
                            "success": false,
                            "message": 'Error : '+ err,
                            "result": ''
                        }
                        res.json(resultats);
                    }
                    else{//token ok
                        //get id from authData
                        var id = 'undefined';
                        if(typeof authData.account !== 'undefined'){id = authData.account[0]._id;}
                        if(id !== 'undefined'){
                            //get account
                            Account.findById(id,function(err, account){
                                if(err){
                                    resultats = {
                                        "success": false,
                                        "message": 'Error : '+ err,
                                        "result": ''
                                    }
                                    res.json(resultats); 
                                }
                                else if(account===null){
                                    resultats = {
                                        "success": false,
                                        "message": 'Error : Account not found',
                                        "result": ''
                                    }
                                    res.json(resultats);
                                }
                                else{
                                    if(account.enable===true){
                                        //crypt new password
                                        var pass = req.body.password;
                                        var hashpass = bcrypt.hashSync(pass,10);
                                        //update
                                        account.nom = req.body.nom;
                                        account.prenom = req.body.prenom;
                                        account.email = req.body.email;
                                        account.tel = req.body.tel;
                                        account.email= req.body.email;
                                        account.datenaissance = req.body.datenaissance;
                                        account.password =hashpass;

                                        account.save(function(err){
                                            if(err){
                                                resultats = {
                                                    "success": false,
                                                    "message": 'Error : '+ err,
                                                    "result": ''
                                                }
                                                res.json(resultats); 
                                            }
                                            else{
                                                resultats = {
                                                    "success": true,
                                                    "message": "SUCCESS",
                                                    "result": account
                                                }
                                                res.json(resultats);
                                            }
                                        });
                                    }
                                    else{
                                        resultats = {
                                            "success": false,
                                            "message": 'Error : Ce compte est desactivé, impossible de le modifier',
                                            "result": ''
                                        }
                                        res.json(resultats); 
                                    }
                                }
                            });
                        }
                        else{//account id not found
                            resultats = {
                                "success": false,
                                "message": 'Error : account id not found',
                                "result": ''
                            }
                            res.json(resultats); 
                        }
                    }
                });
            }
            else{//token undefined
                resultats = {
                    "success": false,
                    "message": 'Error : token is undefined',
                    "result": ''
                }
                res.json(resultats);
            }
        }catch(e){
            resultats = {
                "success": false,
                "message": 'Error : '+ e,
                "result": ''
            }
            res.json(resultats);
        }
    }else{
        resultats = {
            "success": false,
            "message": 'Error : '+ errors,
            "result": ''
        }
        res.json(resultats);
    }
};


/**===============================================================
 * GET /api/account
 */
exports.getaccount = (req, res) => {
    const errors = validationResult(req);
    if(errors.isEmpty()){
        try{
            var token = logHelper.getToken(req,res);
            if(typeof token !== 'undefined'){
                //check token
                jwt.verify(token,'secretKey', (err,authData) => {
                    if(err){
                        resultats = {
                            "success": false,
                            "message": 'Error : '+ err,
                            "result": ''
                        }
                        res.json(resultats);
                    }
                    else{//token ok
                        //get id from authData
                        var id = 'undefined';
                        if(typeof authData.account !== 'undefined'){id = authData.account[0]._id;}
                        if(id !== 'undefined'){
                            //Get account by id from DB
                            Account.findById(id,function(err, account){
                                if (err){
                                    resultats = {
                                        "success": false,
                                        "message": 'Error : '+ err,
                                        "result": ''
                                    }
                                    res.json(resultats); 
                                }
                                else if(account===null){
                                    resultats = {
                                        "success": false,
                                        "message": 'account not found',
                                        "result": ''
                                    }
                                    res.json(resultats); 
                                }
                                else{
                                    resultats = {
                                        "success": true,
                                        "message": "SUCCESS",
                                        "result": account
                                    }
                                    res.json(resultats);
                                }                            
                            }); 
                        }
                        else{//account id not found
                            resultats = {
                                "success": false,
                                "message": 'Error : account id not found',
                                "result": ''
                            }
                            res.json(resultats); 
                        }
                    }
                });
            }
            else{
                resultats = {
                    "success": false,
                    "message": 'Error : token is undefined',
                    "result": ''
                }
                res.json(resultats);
            } 
        }catch(e){
            resultats = {
                "success": false,
                "message": 'Error : '+ e,
                "result": ''
            }
            res.json(resultats);
        }  
    }else{
        resultats = {
            "success": false,
            "message": 'Error : '+ errors,
            "result": ''
        }
        res.json(resultats);
    }
};

Это мой фронт:

constructor(props) {
    super(props);
    this.state = {
        items: [],
        acc_email: '',
        acc_nom: '',
        acc_prenom: '',
        acc_tel: '',
    };
    this.handleInputChange = this.handleInputChange.bind(this); 
    this.handleSubmit = this.handleSubmit.bind(this);
}

Этот componentDidMount () отображает информацию во входном тексте:

componentDidMount(){
    const token =  localStorage.getItem('toktok');
    fetch(`${API}/api/account`,{
        method: 'GET',
        headers :{
            'authorization': `Bearer ${token}`, 
        }
    })

    .then(results => {
        return results.json();
    })

    .then(data => {
        this.setState({ items: data.result });
        console.log("account: ",data.result);
        // localStorage.setItem('mymy',  "fiss");
        // console.log(items);
        // console.log(items.length); 

    })
    .catch(err => {
        console.log("erroooor : ",err);
    });    
}

 handleInputChange = e => { 
        const name = e.target.name;
        const value = e.target.value;
        this.setState({[name]: value});
        this.setState({ [e.target.name]: e.target.value });
      }

И все об этой части кода, которая позволяет пользователю обновлять то, что он изменил:

С помощью этой функции handleSubmit у меня ничего не изменилось в БД. когда администратор нажимает кнопку «Изменить», я имею эту ошибку в консоли:

Ошибка: требуются аргументы данных и соли

 handleSubmit = (event) => {
        event.preventDefault();
        const token =  localStorage.getItem('toktok');
        fetch(`${API}/api/updateaccount`,{
            method: 'PUT',
            headers: {
                'Content-Type': 'application/json',
                'authorization': `Bearer ${token}`
              },
            body: JSON.stringify ({
                email: this.state.acc_email,
                nom: this.state.acc_nom,
                prenom: this.state.acc_prenom,
                tel: this.state.acc_tel,
              })
        })
        .then(res => res.json())
        .then(json => {
            console.log("UPDATE : ",json);  
        }); 
      }    

И, наконец, мой render ():

render(){
        var { items} = this.state;
         return(
            <div id="admin-account">
            <h2>Liste des utilisateurs</h2>
            <form onSubmit={this.handleSubmit}>
                <div key={items._id}>
                    <input type="text" defaultValue={items.email} name="acc_email"  onChange={this.handleInputChange} />
                    <input type="text" defaultValue={items.nom} name="acc_nom"  onChange={this.handleInputChange} />
                    <input type="text" defaultValue={items.prenom} name="acc_prenom"  onChange={this.handleInputChange} />
                    <input type="text" defaultValue={items.tel}  name="acc_tel" onChange={this.handleInputChange} />
                    <button className="admin-btn-update">Modify</button>
                </div> 
            </form>
        </div>

        )
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...