我在節點js中編寫一個REST api,它將執行一個sql查詢併發送結果; 在請求我需要發送WHERE條件;例如:在ajax請求中傳遞查詢條件的最佳做法
GET 127.0.0.1:5007/users //gets the list of users
GET 127.0.0.1:5007/users
id = 1 //gets the user with id 1
現在,條件從客戶端傳遞到請求標頭中的其餘api。 在API中,我使用了sequelize,一個需要接收特定形式(對象)中的WHERE條件的ORM;例如:具有條件:
(x=1 AND (y=2 OR z=3)) OR (x=3 AND y=1)
這需要格式化爲一個嵌套的對象:
-- x=1
-- AND -| -- y=2
| -- OR ----|
| -- z=3
-- OR -|
|
| -- x=3
-- AND -|
-- y=1
所以對象應該是:
Sequelize.or (
Sequelize.and (
{x=1},
Sequelize.or(
{y=2},
{z=3}
)
),
Sequelize.and (
{x=3},
{y=1}
)
)
現在,我試圖通過一個簡單的字符串(比如「(x = 1 AND(y = 2 OR z = 3))OR(x = 3 AND y = 1)」),但是然後我需要一個服務器上的函數,所需的對象(在我看來,這種方法的優勢在於開發人員編寫腳本nt,可以通過簡單的方式傳遞where條件,就像使用sql一樣,並且這種方法也與使用的ORM無關,如果需要更改服務器或使用不同的ORM,則不需要更改客戶端;
將條件字符串讀入並轉換爲對象的函數讓我很頭痛(我試圖寫一個沒有成功,所以如果你有一些關於如何做這樣的事情的例子......)
我想獲得一個航線能夠執行幾乎任何種類的SQL查詢,並給出結果:
現在我對一切不同的路線:
127.0.0.1:5007/users //to get all users
127.0.0.1:5007/users/1 //to get a single user
127.0.0.1:5007/lastusers //to get user registered in the last month
等了我需要查詢的其他表格(一條路線)客戶需要的每種請求); 相反,我想只有一個途徑,是這樣的:
127.0.0.1:5007/request
(調用這個路線我會通過表名和條件字符串時)
你覺得這個解決方案將是一個好的解決方案,或者你通常使用其他方式來處理這種事情? 關於如何編寫函數將條件字符串轉換爲所需對象,您有任何想法嗎?
任何建議,將不勝感激;)
我同意;構建執行所有類型查詢的單個maxi路由應該是一種將API端點減少爲1的方法(除了其他特殊路由);我正在尋找js表達式解析器;如果你已經使用過其中一些,你能告訴哪一個是你最喜歡的嗎? – 2014-08-29 15:08:19