我正在嘗試通過檢查 url 引數及其值來按名稱(或其他欄位)過濾集合,例如
http://localhost:3000/patient?filter=name:jack
我有一種方法可以檢索 url pram 并將其轉換為 json 物件:
const filter = handleQueryFilter(req.query.filter)
const handleQueryFilter = (query) => {
try{
// convert the string to look like json object
// example id: -1, name: 1 to { id: "-1"}, {name: "1" }
const toJSONString = ("{" query ).replace(/(\w*[^:].$)/g, (matched => {
return '"' matched.substring(0, matched.length ) '"}' ;
}));
return JSON.parse(toJSONString);
}catch(err){
return JSON.parse("{}"); // parse empty json if the clients input wrong query format
}
}
從“handleQueryFilter”回傳的內容被傳遞給“find”方法以從資料庫中獲取結果
let patients = await Patient.find(filter);
但是 handleQueryFilter 總是回傳一個空物件(上面的 catch 部分),我做錯了什么?
uj5u.com熱心網友回復:
第一:通過使用自動制作 express pasre req.body
app.use(express.json())
將您的網址編輯為:
http://localhost:3000/patient?name=jack
uj5u.com熱心網友回復:
您的replace操作不是它應該做的:
"{id: -1, name: 1".replace(/(\w*[^:].$)/g, (matched => {
return '"' matched.substring(0, matched.length ) '"}'
}))
回傳'{id: -1, name:" 1"}',這是無效的 JSON,因此JSON.parse會給出錯誤。
嘗試類似的東西
Object.fromEntries("id: -1, name: 1".split(/,\s*/).map(_=>_.split(/:\s*/)))
其回報
{id: '-1', name: '1'},而不需要JSON.parse。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/335924.html
標籤:javascript json 打字稿 MongoDB 表达
