Open
Description
New Issue Checklist
- I am not disclosing a vulnerability.
- I am not just asking a question.
- I have searched through existing issues.
- I can reproduce the issue with the latest version of Parse Server and the Parse Flutter SDK.
^ note I'm using the latest parse server version available on back4app and the latest SDK available for flutter
Issue Description
Steps to reproduce
- Create two classes with a n:n relationship
- Create a query for one of those classes
- Create a query for the other class with a "whereMatchesIn" clause
- Run the query
This is the code from my app:
var deliveryAreasQuery = QueryBuilder(ParseObject('DeliveryArea'))
..whereArrayContainsAll('postalCodes', [postalCode]);
var query = QueryBuilder(ParseObject('Farmer'))
..whereMatchesQuery('deliveryAreas', deliveryAreasQuery)
..whereEqualTo('isActive', true)
..includeObject(['pickupAddress', 'invoiceAddress']);
Note that the other constraints don't do anything to the reproduction. The whereMatchesQuery made the issue appear.
Actual Outcome
Internal Server Error
Upon further investigation, I found that this request URL was generated by the library:
The decoded JSON part of the query is:
{
"deliveryAreas": {
"$inQuery": {
"where": {
"postalCodes": {
"$all": [
21075
]
}
},
"className": "DeliveryArea",
}
},
"isActive": true,
"pickupCoordinates": {
"$nearSphere": {
"__type": "GeoPoint",
"latitude": 53.45994049999999,
"longitude": 9.9288308
}
}
}
NOTE THE TRAILING COMMA AFTER THE className! This is not valid json!
Expected Outcome
Send valid JSON, get the data :)
That's what the previous version did before the upgrade.
Environment
Parse Flutter SDK
- SDK version:
parse_server_sdk_flutter: ^5.1.0
- Flutter version:
3.10.2
- Dart version:
3.0.2
- Operating system version:
linux/ubuntu
Server
- Parse Server version: tested on
5.2.3
,4.10.4
, and4.5.0
Logs
2023-06-03T20:51:01.484Z -
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:558:11)
at ServerResponse.header (/usr/src/app/node_modules/express/lib/response.js:771:10)
at ServerResponse.send (/usr/src/app/node_modules/express/lib/response.js:170:12)
at ServerResponse.json (/usr/src/app/node_modules/express/lib/response.js:267:15)
at /usr/src/app/src/back/app.js:287:9
at Layer.handle_error (/usr/src/app/node_modules/express/lib/router/layer.js:71:5)
at trim_prefix (/usr/src/app/node_modules/express/lib/router/index.js:315:13)
at /usr/src/app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:335:12)
at next (/usr/src/app/node_modules/express/lib/router/index.js:275:10)
at Layer.handle_error (/usr/src/app/node_modules/express/lib/router/layer.js:67:12)
at trim_prefix (/usr/src/app/node_modules/express/lib/router/index.js:315:13)
at /usr/src/app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:335:12)
at next (/usr/src/app/node_modules/express/lib/router/index.js:275:10)
at Immediate.<anonymous> (/usr/src/app/node_modules/express/lib/application.js:233:9)
at Immediate._onImmediate (/usr/src/app/node_modules/express/lib/router/index.js:635:15)
at processImmediate (internal/timers.js:463:21)
2023-06-03T20:51:01.482Z - Uncaught internal server error. Unexpected token } in JSON at position 99
2023-06-03T20:51:01.481Z - Error handling request: SyntaxError: Unexpected token } in JSON at position 99
at JSON.parse (<anonymous>)
at ClassesRouter.handleFind (/usr/src/app/node_modules/parse-server/lib/Routers/ClassesRouter.js:41:25)
at /usr/src/app/node_modules/parse-server/lib/Routers/ClassesRouter.js:210:19
at /usr/src/app/node_modules/parse-server/lib/PromiseRouter.js:175:7
at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
at next (/usr/src/app/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/usr/src/app/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
at /usr/src/app/node_modules/express/lib/router/index.js:281:22
at param (/usr/src/app/node_modules/express/lib/router/index.js:354:14)
at param (/usr/src/app/node_modules/express/lib/router/index.js:365:14)
at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:410:3)
at next (/usr/src/app/node_modules/express/lib/router/index.js:275:10)
at Function.handle (/usr/src/app/node_modules/express/lib/router/index.js:174:3)
at router (/usr/src/app/node_modules/express/lib/router/index.js:47:12)
at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/usr/src/app/node_modules/express/lib/router/index.js:317:13)
at /usr/src/app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:335:12)
at next (/usr/src/app/node_modules/express/lib/router/index.js:275:10)
at /usr/src/app/node_modules/parse-server/lib/middlewares.js:256:7
at processTicksAndRejections (internal/process/task_queues.js:93:5)