2015-09-27 1 views
1

Я использую NodeJS для создания базового веб-сайта как части процесса личного обучения.Вызов маршрутов ExpressJS в маршрутах

Итак, вот моя проблема. Я создал базовый пользовательский API с функциональностью CRUD, вот мой метод создания пользователя.

app.route('/api/users') 
    .post(function(request, response) { 

     var hash = bcryptjs.hashSync(request.body.password, bcryptjs.genSaltSync(10)); 

     var user = new User({ 
      firstname: request.body.firstname, 
      lastname: request.body.lastname, 
      email: request.body.email, 
      password: hash 
     }); 

     user.save(function(error) { 
      if(error) { 
       response.send(error); 
      } else { 
       response.send('User Successfully Created!'); 
      } 
     }) 

    }); 

Хорошо, так что в принципе с этим я хочу, чтобы создать контроллер для обработки входа и регистрации процесса, так как бы я в основном использовать другие маршруты, т.е./Войти, чтобы вызвать эти маршруты?

Таким образом, в теории, как это:

app.post('/login, function(request, response) { 

    // call the api method, and pass this request to use in the POST api method 
    app.call('/api/users/', request.body); 

}); 

Спасибо за любую помощь!

+0

Для вызова другого маршрута вам понадобится библиотека, например 'response'. В качестве альтернативы вы можете использовать один и тот же обработчик для обоих маршрутов с незначительными отличиями (например, возвратом json или некоторым видом). –

+0

@ vsevolod-goloviznin. В качестве альтернативы вы можете использовать один и тот же обработчик для обоих маршрутов с незначительными отличиями (например, возврат json или какого-либо вида). Как точно буду ли я делать это и как сделать вывод условным? –

ответ

7

Объяснение моей идеи с некоторым примером кода.

Вы можете иметь эту функцию, определенную:

function saveUser(request, response, callback) {  

    var hash = bcryptjs.hashSync(request.body.password, bcryptjs.genSaltSync(10)); 

    var user = new User({ 
     firstname: request.body.firstname, 
     lastname: request.body.lastname, 
     email: request.body.email, 
     password: hash 
    }); 

    user.save(function(error) { 
     if(error) { 
      callback(err); 
     } else { 
      callback(null); 
     } 
    }) 
}) 

Тогда вы можете вызвать его из обоих маршрутов обработчиков:

app.route('/api/users').function(function(req, res) { 
    saveUser(req, res, function() { 
     return res.json({success: true}); 
    }); 
}) 

app.post('/login').function(function(req, res) { 
    saveUser(req, res, function() { 
     return res.render("some_view"); 
    }); 
}) 

Вы также можете использовать посылы, чтобы определить обработчик, чтобы использовать then и catch если хочешь.

Смежные вопросы