2016-03-12 2 views
1

Я новичок в Node.JS, исходящем из фона Java. Я использую express для создания этого Rest API. То, что я пытаюсь сделать, - это построить концепцию менеджера. Я ищу элегантный способ возвращения объекта пользователя в следующих:Возврат объекта из функции промежуточного программного обеспечения в Node.JS

пользователей маршрута: user.js

router.get('/find/:email', function(req, res, next){ 
    userWare.findUserByEmail(req, res, next) 
}); 

промежуточного слоя/менеджер: usermiddleware.js

module.exports = { 
    findUserByEmail: function(req, res, next) { 
     models.core_user.find({ 
      where:{ 
       email: req.params.email 
      } 
     }).then(function(user){ 
      res.json(user) 
     }, function(err){ 
      res.status(404).json(err); 
     }); 
    }, 
} 

Так что в этом выше функции Я хотел бы вернуть объект пользователя на маршрут вместо json. так что я могу создать json из объекта на маршруте. Весь смысл этого класса-менеджера будет для объектов fectch и return.

+0

Возвращает 'user' объект кто? Вы не можете передавать собственные объекты JS другим процессам или в результате HTTP-вызова. Вы можете выбрать определенные атрибуты из этого объекта и вернуть их только как JSON (это текстовый формат), но вы не можете вернуть объект JS другому процессу или в результате HTTP-вызова. Этот объект JS принадлежит только этому экземпляру Javascript V8, работающему в node.js, и работает только в этом контексте. Вы не можете выйти за пределы этой среды V8. – jfriend00

+0

Если ваша база данных 'userWare' имеет уникальный идентификатор для каждого пользователя, возможно, вам просто нужно вернуть идентификатор как JSON или как строку, а затем вызывающий API может использовать этот идентификатор в последующих вызовах API для идентификации этого конкретного пользователя. Обычно такие проблемы решаются. Объект в базе данных сводится к некоторому уникальному ключу, и этот ключ - это обмен между процессами, и если вам нужно вернуться к этому конкретному пользовательскому объекту при некотором подзадачном вызове API, вы можете использовать этот ключ, чтобы быстро получить соответствующий объект пользователя. – jfriend00

ответ

3

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

Ответный

user.js

router.get('/find/:email', function (req, res, next) { 
    userWare.findUserByEmail(req.params.email, function (err, data) { 
     // error as first parameter or null if no error occurred 
     if (err) { 
      return res.status(404).json(err); 
     } 
     res.json(user); 
    }); 
}); 

usermiddleware.js

module.exports = { 
    findUserByEmail: function (email, next) { 
     models.core_user.find({ 
      where: { 
       email: email 
      } 
     }).then(
      function (user) { 
       // async call of callback with user object 
       next(null, user); 
      }, 
      function (err) { 
       // async call of callback with error 
       next(err); 
      } 
     ); 
    } 
}; 

Promise

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

user.js

router.get('/find/:email', function (req, res, next) { 
    userWare.findUserByEmail(req.params.email).then(
     function (user) { 
      res.json(user); 
     }, 
     function (err) { 
      res.status(404).json(err) 
     } 
    ); 
}); 

usermiddleware.js

module.exports = { 
    findUserByEmail: function (email) { 
     // return the promise to the caller 
     return models.core_user.find({ 
      where: { 
       email: email 
      } 
     }); 
    } 
}; 
+0

Это работает! благодаря! Мне это нравится –

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

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