Search code examples
node.jsexpressparse-serverbitnamiforever

Parse Server + Express - Issues with ParseError and site dying/restarting


I have deployed a Bitnami Parse stack to a Google Cloud VM. This stack is basically Apache running as a proxy, Then a MEAN stack handling parse server and dashboard etc.

Everything appears to be working fine when accessing the dashboard and sending individual CURL requests to test it's all available.

However, there appears to be a fatal flaw in that. When Parse returns one of it's errors e.g.

{"code":101,"error":"Object not found."}

Express sees it as an uncaught exception and dies. Now I realise that it's intentional behaviour (There's enough information out there as to why you don't want to persist after an uncaught exception)

The Bitnami stack uses Forever to run the Parse Server, but as you can see from the logs I will include below, you still run into issues with refused connections.

2016-11-25T11:41:16+00:00 DEBUG (7): {"code":101,"error":"Object not found."}
2016-11-25T11:41:16+00:00 DEBUG (7): Failed to connect to X.X.X.X: Connection refused
2016-11-25T11:41:17+00:00 DEBUG (7): Failed to connect to X.X.X.X: Connection refused
2016-11-25T11:41:17+00:00 DEBUG (7): Failed to connect to X.X.X.X: Connection refused
2016-11-25T11:41:17+00:00 DEBUG (7): Failed to connect to X.X.X.X: Connection refused

Meanwhile in the Forever logs:

Error generating response. ParseError { code: 101, message: 'Object not found.' } code=101, message=Object not found.
[object Object]
/opt/bitnami/apps/parse/htdocs/node_modules/parse-server/lib/ParseServer.js:425
        throw err;
        ^

Error: EACCES: permission denied, open '/opt/bitnami/apps/parse/htdocs/logs/parse-server.info.2016-11-25'
at Error (native)
error: Forever detected script exited with code: 7
error: Script restart attempt #1
parse-server running on port 1337
parse-dashboard running on port 4040

So you can see that immediately following a Parse error being returned, The service is unavailable until Forever can restart the Parse Server.

This issue appears that it would affect all users as well, so if one user receives an exception, all users lose connection for a brief period.

So the question is, how should this be properly handled? Is Parse + Express not the way to go about it? Or is there some method of configuring Node or Express to return the API error to the requester, without Express dying (And without having to fall into the trap of using uncaughtException to keep Node alive)

Any help would be much appreciated, thank you


Solution

  • The logs from Forever said it's EACCES error, that means ParseServer couldn't access the log file and not able to write the info log in it.

    Error: EACCES: permission denied, open '/opt/bitnami/apps/parse/htdocs/logs/parse-server.info.2016-11-25'
    at Error (native)
    error: Forever detected script exited with code: 7
    error: Script restart attempt #1
    parse-server running on port 1337
    parse-dashboard running on port 4040
    

    I think you have to change the /opt/bitnami/apps/parse/htdocs/logs with proper permission so that ParseServer can write log files in it.