Цель: мне нужно обновить введенный текст и сохранить его в БД.
Когда администратор хочет изменить информацию пользователя, он выбирает строку и нажимает на нее, он перенаправляется на другую страницу, где онможете обновить эту строку пользовательской информации. на этой странице есть текст (электронная почта, 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>
)
}