Статьи

Создание блогового приложения с использованием React, часть 5: страница профиля

В предыдущей части этой серии руководств вы узнали, как реализовать функцию обновления и удаления записей для нашего блогового приложения React. В этом руководстве вы реализуете страницу профиля для приложения блога.

Давайте начнем с клонирования исходного кода из последней части серии.

1
https://github.com/royagasthyan/ReactBlogApp-EditDelete

После того, как каталог был клонирован, перейдите в каталог проекта и установите необходимые зависимости.

1
2
cd ReactBlogApp-EditDelete
npm install

Запустите сервер Node.js, и приложение будет запущено по адресу http: // localhost: 7777 / index.html # / .

Сначала вам нужно добавить новый пункт меню в меню домашней страницы под названием Profile . На странице home.html добавьте новый элемент ul для страницы профиля, как показано ниже:

1
2
3
4
5
6
<ul class=»nav nav-pills pull-right»>
    <li role=»presentation» id=»homeHyperlink» class=»active»><a href=»#»>Home</a></li>
    <li role=»presentation» id=»addHyperLink»><a href=»/home#/addPost»>Add</a></li>
    <li role=»presentation» id=»btnProfile»><a href=»/home#/showProfile»>Profile</a></li>
    <li role=»presentation»><a href=»#»>Logout</a></li>
</ul>

Сохраните вышеуказанные изменения и перезагрузите сервер. В браузере укажите http: // localhost: 7777 / и войдите в приложение. После входа в систему вы сможете просмотреть список меню со ссылкой на профиль.

React Blog App - Ссылка на профиль в меню

Чтобы ссылка в меню профиля работала, вам нужно добавить новый маршрут к существующим маршрутам в файле home.jsx .

1
2
3
4
5
6
7
ReactDOM.render(
    <Router history={hashHistory}>
        <Route component={ShowPost} path=»/»></Route>
        <Route component={AddPost} path=»/addPost(/:id)»></Route>
        <Route component={ShowProfile} path=»/showProfile»></Route>
    </Router>,
document.getElementById(‘app’));

В файле home.jsx создайте новый компонент ShowProfile . Добавьте некоторые переменные состояния для name , password , email и Id . В методе ShowProfile компонента ShowProfile добавьте HTML- ShowProfile для отображения деталей профиля. Вот как ShowProfile компонент ShowProfile :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class ShowProfile extends React.Component {
    constructor(props) {
      super(props);
      this.state = {
        name:»,
        email:»,
        password:»,
        id:»
      };
       
    }
    componentDidMount(){
      document.getElementById(‘addHyperLink’).className = «»;
      document.getElementById(‘homeHyperlink’).className = «»;
      document.getElementById(‘profileHyperlink’).className = «active»;
      this.getProfile();
    }
    updateProfile(){
       
    }
 
    getProfile(){
 
    }
     
    render() {
      return (
        <div className=»col-md-5″>
          <div className=»form-area»>
              <form role=»form»>
                <br styles=»clear:both» />
                <div className=»form-group»>
                  <input value={this.state.name} type=»text» onChange={this.handleNameChange} className=»form-control» placeholder=»Name» required />
                </div>
                <div className=»form-group»>
                  <input value={this.state.password} type=»password» onChange={this.handlePasswordChange} className=»form-control» placeholder=»Password» required />
                </div>
                
                <button type=»button» onClick={this.updateProfile} id=»submit» name=»submit» className=»btn btn-primary pull-right»>Update</button>
              </form>
          </div>
        </div>
      )
    }
}

Когда страница профиля загружена, вам нужно извлечь данные из базы данных и заполнить ее в форме. Добавьте код в метод getProfile внутри компонента ShowProfile чтобы вызвать AJAX для получения подробных сведений о пользователе.

1
2
3
4
5
6
7
8
axios.post(‘/getProfile’, {
})
.then(function (response) {
     
})
.catch(function (error) {
    console.log(‘error is ‘,error);
});

Как только детали получены в ответе, вам необходимо обновить переменные состояния для них. Вот метод getProfile из компонента ShowProfile :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
getProfile(){
  var self = this;
  axios.post(‘/getProfile’, {
  })
  .then(function (response) {
    if(response){
      self.setState({name:response.data.name});
      self.setState({email:response.data.email});
      self.setState({password:response.data.password});
    }
  })
  .catch(function (error) {
    console.log(‘error is ‘,error);
  });
}

Внутри файла app.js создайте метод getProfile который будет обрабатывать вызов метода POST из метода ShowProfile getProfile . Метод app.js файле app.js вместо этого вызовет user.js для получения подробностей из базы данных. Вот как это выглядит:

1
2
3
4
5
app.post(‘/getProfile’, function(req,res){
  user.getUserInfo(sessions.username, function(result){
    res.send(result)
  })
})

Внутри файла user.js создайте метод getUserInfo который будет запрашивать базу данных MongoDB, используя имя пользователя, чтобы получить необходимые данные. Вот как выглядит метод getUserInfo :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
getUserInfo: function(username, callback){
    MongoClient.connect(url, function(err, db){
         
        db.collection(‘user’).findOne( { email : username
        },function(err, result){
            if(result==null){
                callback(false)
            }
            else{
                callback(result);
            }
        });
         
    });
}

Как видно из приведенного выше кода, вы вызываете MongoDB, используя MongoClient для запроса коллекции пользователей на основе адреса электронной почты. Как только результат получен, он возвращается обратно в функцию обратного вызова.

Сохраните вышеуказанные изменения и перезапустите сервер Node.js. В браузере укажите http: // localhost: 7777 / # / и войдите в приложение. Нажмите на ссылку профиля в меню, и вы сможете просмотреть информацию о профиле, заполненную на странице.

React Blog App - Редактировать профиль

Чтобы обработать изменение имени и пароля, вам нужно определить два метода с handleNameChange и handlePasswordChange в компоненте ShowProfile . Эти методы устанавливают переменные состояния при изменении текста. Вот как это выглядит:

1
2
3
4
5
6
handleNameChange(e){
  this.setState({name:e.target.value})
}
handlePasswordChange(e){
  this.setState({password:e.target.value})
}

ShowProfile методы в конструкторе ShowProfile .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
constructor(props) {
  super(props);
  this.handleNameChange = this.handleNameChange.bind(this);
  this.handlePasswordChange = this.handlePasswordChange.bind(this);
  this.updateProfile = this.updateProfile.bind(this);
  this.getProfile = this.getProfile.bind(this);
  this.state = {
    name:»,
    email:»,
    password:»,
    id:»
  };
   
}

Определите метод с именем updateProfile который будет вызываться, когда пользователь нажимает кнопку « Update для обновления сведений о пользователе. Внутри метода updateProfile выполните POST-вызов метода app.js файле app.js вместе с измененным name и password . Вот как updateProfile метод ShowProfile компоненте ShowProfile :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
updateProfile(){
  var self = this;
  axios.post(‘/updateProfile’, {
    name: this.state.name,
    password: this.state.password
  })
  .then(function (response) {
    if(response){
      hashHistory.push(‘/’)
    }
  })
  .catch(function (error) {
    console.log(‘error is ‘,error);
  });
}

После получения ответа на вызов POST экран переходит к списку сообщений в блоге.

Внутри файла app.js создайте метод updateProfile который будет анализировать переданные параметры и вызывать базу данных MongoDB.

1
2
3
4
5
6
7
8
app.post(‘/updateProfile’, function(req, res){
  var name = req.body.name;
  var password = req.body.password;
   
  user.updateProfile(name, password, sessions.username, function(result){
      res.send(result);
  })
})

Как видно из приведенного выше кода, после анализа параметров в методе app.js файле user.updateProfile метод user.updateProfile с измененным name , password и username .

Давайте определим метод user.updateProfile внутри файла user.js , который будет вызывать MongoDB данных MongoDB и обновлять name и password на основе имени username . Вот как updateProfile метод user.js файле user.js :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
updateProfile: function(name, password, username, callback){
    MongoClient.connect(url, function(err, db) {
        db.collection(‘user’).updateOne(
            { «email»: username },
            { $set:
                { «name» : name,
                  «password» : password
                }
            },function(err, result){
             
            if(err == null){
                callback(true)
            }
            else{
                callback(false)
            }
        });
    });
}

В приведенном выше коде вы обновили данные пользователя на основе адреса электронной почты, используя метод updateOne .

Сохраните вышеуказанные изменения и перезагрузите сервер. Войдите в приложение и нажмите на ссылку Профиль . Измените имя и пароль и нажмите кнопку Обновить . Попробуйте войти, и вы сможете войти, используя новый пароль.

В этом руководстве вы реализовали страницу профиля для приложения блога. Вы узнали, как получать данные из базы данных и заполнять их на странице с помощью React. Вы также реализовали функциональность для обновления деталей профиля.

Исходный код из этого урока доступен на GitHub . Дайте мне знать ваши мысли или любые предложения в комментариях ниже.