这个查询:
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]调用模块文件:c:/ Program Files / ArangoDB 2.6.2 / var / lib / arangodb-apps / _db / _system / exameFacil / APP / controllers / clinics.js] . ArangoApp.loadAppScript上的Module.run(C:\ Program Files \ ArangoDB 2.6.2 \ bin ../ share / arangodb / js / common / bootstrap / modules.js:1420:20)(c:/ Program Files / ArangoDB 2.6) mountController上的.2 / share / arangodb / js / server / modules / org / arangodb / foxx / arangoApp.js:452:24)(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在ObjectApp(在c:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / foxx / routing.js:629:32)的Array.forEach(native)处于Object.routes( c:/ 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.j s:1054:74)在Object.routeRequest上执行(c:/ Program Files / ArangoDB 2.6.2 / share / arangodb / js / server / modules / org / arangodb / actions.js:1308:7)(c:/程序文件/ 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 \共享\ arangodb \ JS \行动\ API-system.js:58:15)
有什么建议?谢谢
1 回答
出错的原因是示例代码中的JavaScript解析错误 . JavaScript不支持函数
searchProcedure
中使用的多行字符串 . 要使查询字符串跨越多行,您必须使用字符串连接或模板字符串(反引号中包含的字符串,ES6功能) .字符串连接的示例:
使用模板字符串的示例:
另一种方法是将查询字符串放在一行上 . 用于上述查询的替代方案是可读性和样式偏好的问题 .
在处理用户生成的输入时,我建议使用绑定参数将用户输入与实际查询字符串分开,并防止注入 .