[英]Filtering API responses as query params programmatically
我試圖通過允許端點接收查詢參數來過濾來自節點應用程序中 api 的響應。
const server = http.createServer((req, res) => {
const serverLogs = logs.data;
const urlQueryParams = url.parse(req.url, true).query;
//Looping through all logs
for(var i in serverLogs){
var spd = serverLogs[i];
level = spd.level;
serverID = spd.serverId;
//console.log(serverID, level);
}
console.log(`Log Level Query Param: ${urlQueryParams.level}`);
res.end(JSON.stringify(serverLogs));
});
以編程方式,我想讓級別可查詢,因此當我跳入 Postman 時,我可以按特定級別獲取所有數據。
關於如何接近的任何想法?
幾點建議:
一般來說,每個套路應該有一份工作,而且只有一份工作。 這被稱為 單一職責原則。
它將幫助您正確完成每個部分,並且還將有助於編寫測試。
一個可能適合划定邊界的地方是編寫一個函數,該函數接受單個日志條目和過濾條件,並返回一個布爾值,指示該條目是否滿足條件。 您可以在這個基本構建塊上構建各種東西。
任何依賴於在過濾行之前將整個日志讀入 RAM 的模式都會產生糟糕的性能。 從您的片段中不清楚logs.data
是什么,但我的猜測是它是FS.readFileSync
或類似的結果。 這會將整個文件加載到 RAM 中,然后讓您對其進行操作,但擴展性會很差。
Cehiro 建議使用 DB 將通過將過濾推入 DB 引擎來解決這個問題,這減輕了您的節點處理工作,但它至少有兩個您可能不喜歡的后果:(1)它限制了您的匹配操作DB 支持,並且 (2) DB 是一個重量級的復雜層。
根據我的經驗,日志通常要么以純文本形式寫入磁盤,要么通過即發即棄消息(有時兩者兼而有之)傳輸到專用日志存儲。 我懷疑您將處理磁盤上的日志文件。
Node 對Streams有很好的支持,這會讓你高效地掃描日志數據,而不會犧牲編寫完全適合你需求的過濾邏輯的自由。
我實際上編寫了一個庫來了解簡單的查詢語法,這可能是一個不錯的起點。 我為類似的用例設計了它,因此它可能適合您的需求。 當然,如果你不喜歡我的,可能還有其他人滿意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.