2016-03-12 48 views
1

我是來自Java背景的Node.JS的新手,我使用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。這個經理類的全部重點將是對象並返回。

+0

返回了'user'對象是誰?您不能將本機JS對象傳遞給其他進程或作爲HTTP調用的結果。您可以從該對象中選擇某些屬性並僅返回JSON(這是一種文本格式),但不能將JS對象返回給某個其他進程或作爲HTTP調用的結果。該JS對象只屬於在node.js中運行的Javascript V8引擎的這個實例,並且只能在該上下文中運行。你不能把它放在V8環境之外。 – jfriend00

+0

如果您的'userWare'數據庫具有每個用戶的唯一ID,則可能只需將ID作爲JSON或作爲字符串返回,然後API的調用方就可以在隨後的API調用中使用該ID來標識特定用戶。這通常是如何解決這樣的問題。數據庫中的一個對象被簡化爲某種唯一鍵,這個鍵就是進程之間交換的內容,如果你需要在一些次要的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); 
      } 
     ); 
    } 
}; 

無極

你也可以只返回親瀨由模型返回,那麼就應該是這樣的:

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

這個工程!謝謝!我喜歡這個 –