[英]ArangoDB - Query doesn't work in FOXX but works in web interface
該查詢:
FOR clinic IN exameFacil_clinics
LET procedures_list = (
FOR procedure IN clinic.procedures
FILTER LIKE(procedure.name, "%hemo%", true)
COLLECT procedures_list = procedure.name
RETURN procedures_list
)
FILTER LENGTH(procedures_list) > 0
RETURN{
clinic_name: clinic.name,
procedures_list: procedures_list}
在AQL編輯器中的ArangoDB的Web界面中執行時,可以正常工作並返回預期的結果,但是當我嘗試在FOXX存儲庫中執行時卻給我一個錯誤:
'use strict';
var Foxx = require('org/arangodb/foxx');
module.exports = Foxx.Repository.extend({
// Add your custom methods here
//Return all procedures from a clinic, given the clinic id
getAllProcedures: Foxx.createQuery({
query: 'FOR clinic IN exameFacil_clinics FILTER clinic._key == @id RETURN clinic.procedures',
params: ['id']
}),
//Make a 'LIKE' query in all procedures from all clinics, given the search string ( procedure name )
searchProcedure: Foxx.createQuery({
query: 'FOR clinic IN exameFacil_clinics
LET procedures_list = (
FOR procedure IN clinic.procedures
FILTER LIKE(procedure.name, "%hemo%", true)
COLLECT procedures_list = procedure.name
RETURN procedures_list
)
FILTER LENGTH(procedures_list) > 0
RETURN{
clinic_name: clinic.name,
procedures_list: procedures_list}'
}),
});
錯誤:
[ArangoError 3103:無法在[object Object] .Module上調用模塊文件:c:/ Program Files / ArangoDB 2.6.2 / var / lib / arangodb-apps / _db / _system / exameFacil / APP / controllers / clinics.js]。 .run(C:\\ Program Files \\ ArangoDB 2.6.2 \\ bin ../ share / arangodb / js / common / bootstrap / modules.js:1420:20)在ArangoApp.loadAppScript(c:/ Program Files / ArangoDB 2.6。 2 / share / arangodb / js / server / modules / org / arangodb / foxx / arangoApp.js:452:24)在mountController(c:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / foxx / routing.js:661:7)位於c:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / foxx / routing.js:630:9 Object.routes(c上的routeApp(c:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / foxx / routing.js:629:32)上的Array.forEach(本機) :/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / foxx / manager.js:268:10)位於foxxRouting(c:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / actions.js: 1054:74)在Object.routeRequest(c:/ Program Files)執行(c:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / actions.js:1308:7) / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / actions.js:1329:3),位於Function.actions.defineHttp.callback(c:\\ Program Files \\ ArangoDB 2.6.2 \\ share \\ arangodb \\ js \\ actions \\ api-system.js:58:15)
有什么建議嗎? 謝謝
該錯誤的原因是示例代碼中的JavaScript分析錯誤。 JavaScript不支持searchProcedure
函數中使用的多行字符串。 要使查詢字符串跨越多行,您將不得不使用字符串串聯或模板字符串(用反引號括起來的字符串,ES6功能)。
字符串連接示例:
searchProcedure: Foxx.createQuery({
query: 'FOR clinic IN exameFacil_clinics' +
' LET procedures_list = (' +
// ... string goes on here
'procedures_list: procedures_list}'
}),
使用模板字符串的示例:
searchProcedure: Foxx.createQuery({
query: `FOR clinic IN exameFacil_clinics
LET procedures_list = (
// ... string goes on here
procedures_list: procedures_list}`
}),
另一種選擇是將查詢字符串放在一行上。 用於上述查詢的哪種選擇取決於可讀性和樣式首選項。
當處理用戶生成的輸入時,我建議還使用綁定參數將用戶輸入與實際查詢字符串分開,並防止注入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.