2015-02-24 31 views
0

鑑於路由「或」與查詢不同的數據類型中sails.js

GET /user/42 
GET /user/dude 

其中42是用戶id和哥們是用戶名。

所以,我想在我的控制器中返回兩種情況下的用戶的方法。這裏是:

// api/controllers/UserController.js 
findOne: function(req, res) { 
    User.findOne({ 
     or: [ 
      {id: req.params.id}, 
      {username: req.params.id} 
     ] 
    }).exec(function(err, user) { 
     if (err) { 
      return console.log(err); 
     } 
     res.json(user); 
    }); 
}, 

當我嘗試GET /user/42一切都很好。

當我嘗試GET /user/dude我得到錯誤:

Error (E_UNKNOWN) :: Encountered an unexpected error

error: invalid input syntax for integer: "dude"

好像帆拒絕處理{id: 'dude'}因爲類型不匹配的。

我使用sails-postgresql 0.10.9的風帆0.10.5。那麼我做錯了什麼?

UPD:我知道如何解決問題。當然,我可以把if語句放到我的控制器中,並檢查它得到的參數類型。實際上,我剛創建了兩條路線,它們使用指向單一方法的regexp參數。

我的實際問題是爲什麼我不能用or來做到這一點。帆是否提供這種方式?

回答

1

By default, sails get method only supports id numbers. You will need to define custom routes and implement the relevant api method to support a get request using a string instead of a number.


技術細節: 爲了解決您的具體問題,你需要在你的routes.js定義以下航線

module.exports.routes = { 
... 
    '/user/get/:param': 'UserController.findByIDorName', 
... 
} 

這將在/用戶後通過什麼/將get /作爲名爲'param'的參數傳遞給findByIDorName控制器方法。

接下來,您需要檢查帕拉姆的類型,並決定,如果你想獲取基於ID或名字的用戶信息,所以在您的userController.js

findByIDorName : function (req, res) { 
     if (isNaN(req.param)){ 
       //find the user by his username after any validation you need 
     } 
     else { 
      //find the user by his id and return 
     } 
} 
+0

我添加此功能。我根本不使用藍圖。 – 2015-02-26 12:13:57

+0

我添加了一些細節,你需要在路由和控制器中處理這個問題。 – arkoak 2015-02-27 05:58:47

+0

謝謝你的嘗試。我已經upvoted你的答案,但它不能解決我的實際問題。我更新問題以獲取更多詳細信息 – 2015-02-27 09:51:40