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 versions of Parse Server and the Parse JS SDK.
Issue Description
I was wondering about the practical method behind Parse.Object.saveAll, If my Parse Server I want to redirect through Proxy
ex: 192.168.1.1/api -> 192.168.1.1:4000/parse then, here is the problem.
on the parse/lib/node/ParseObject.js line:2388
return RESTController.request('POST', 'batch', {
requests: batch.map(obj => {
const params = obj._getSaveParams();
params.path = getServerUrlPath() + params.path;
return params;
})
}, options);
And here is the problem, After the above code, my input data format will be like this:
{
"requests": [
{
"method": "PUT",
"path": "/api/classes/{{className}}/{{ objectId }}",
"body": {
{{ Here is the object body}}
}
}
]
}
and then, as you can see the RESTController will send a axios POST for url -> 192.168.1.1/api/batch and then proxy server (nginx), will let the request send to the 192.168.1.1:4000/parse/batch, but in my requests body, the path only show it to /api/classes/{{className}}/{{objectId}}
, it wont through the nginx setting to let the redirect change to /parse/classes/{{className}}/{{objectId}}
Steps to reproduce
//config.js
const parseUrl = process.env.PARSE_URL || 'http://192.168.1.1/api'; // the nginx will let the 192.168.1.1/api turn into 192.168.1.1:4000/parse
const appId = 'test';
const masterKey = 'test-key';
const initParse = () => {
Parse.initialize(appId, null, masterKey);
Parse.serverURL = parseUrl;
Parse.User.enableUnsafeCurrentUser();
};
const query = new Parse.Query(Tests);
const tests = await query.findAll()
tests.forEach((test) => {
test.set('name', 'something');
})
await Parse.Object.saveAll(tests); // And then show the error code 206
Actual Outcome
format : Parse Error: cannot route batch path: /api/classes/{{className}}/{{objectId}} { code: 111 }
real outcome: ParseError: cannot route batch path /api/classes/tests/6ab89f70-addf-11ed-b17e-f98dadf7fe5c at C:\Users.......\node_modules\parse\lib\node\ParseObject.js:3047:34 at processTicksAndRejections (node:internal/process/task_queues:96:5) { code: 111 },
.
.
.
Expected Outcome
Expected it can saveAll and the response won't fail
Environment
Nginx
location /api/ {
#proxy_redirect off;
#proxy_set_header Host $host;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
add_header Access-Control-Allow-Headers 'Content-Type, X-DP-Token, X-DP-Application-Id';
#proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.1:4000/parse/;
client_max_body_size 16M;
}
Server
- Parse Server version: 6.2.0
- Operating system: linux
Database
- MongoDB
Client
- Parse JS SDK version: 4.1.0