Guide

Troubleshooting

Symptoms that have no error message attached, and where to look for each.

Most problems here announce themselves — a validation error, a permission refusal, a stack trace. The ones below historically did not, because a decorator that never ran produces no request to fail. Several now report themselves at boot; where that is the case it says so.

Symptom index

SymptomCauseWhere
Decorators do nothing, or behave oddlyexperimentalDecorators not setGetting started — now throws with a clear message
No models, empty schema, no routesimportFiles looked for .js and found only .tsWarns at boot with the extensions it wants
Every class registered twiceimportFiles ran over compiled and source copiesWarns, naming the class
A trigger never firesDeclared on a class without @ParseClassTriggers — warns, naming the class
Writes land outside a transactiondirectAccess not trueTransactions
A Pointer is ignored by fromParamsNo targetClass, or the class is excluded by configurationModels — Pointer without a target throws at import
An array of pointers stays rawThe Array field has no targetClassField options
Typed property access unavailableA query result was not cast to the modelModels
Cron jobs never runnode-cron not installedWarns at boot
Optimistic locking has no effectAdapter not wired in, or running on PostgresOptimistic locking — warns at boot
An endpoint is reachable with no session, despite requiresAuth: trueFixed in 3.0.0. Before that the flag was read only by the OpenAPI renderer — the endpoint was open while the docs drew a padlock on it. Upgrade, or use validation: {requireUser: true}.
A rate limit never firesFixed in 3.0.0. The limiter was applied only on the entity route, so a caller asking for /functions/{name} directly skipped it. Note the declared methods apply to the entity route only, by design — Parse.Cloud.run always POSTs to /functions.
A valid master key is refusedNothing configured to compare it againstConfiguration
A query returns nothing, but the data existsThe ACL filtered every rowQueries — re-run with the master key to confirm
Only 100 rows come backThat is the default limitQueries
A pointer comes back as {__type: 'Pointer'}No include() for itQueries
A row is visible to everyoneNo ACL was set, so the class default applied — which is public unless declaredPermissions & ACL
An image is invisible while its record is publicsyncImageAcl not called after the parent's ACL was setFiles & images
A private file is reachable by URLFile URLs are not ACL-protectedFiles & images
Password reset email never arrivesNo email adapter, or publicServerURL unsetUsers & auth
A revoked role still worksThe role cache is on and was not invalidatedUsers & auth
A user can edit another userSaved with the master key instead of the caller's session tokenUsers & auth
Unique indexes vanish after a restartparse-server < 8.3, or keepUnknownIndexes offDefaults protective since 2.8

Traps that no longer exist

Two were removed rather than documented, because a warning is not a fix:

Fields reading undefined A class field could shadow @ParseField's accessor at target: ES2022 — reads returned undefined, and writes landed on the instance so save() sent nothing. @ParseClass now repairs it, whatever the compiler settings.
Decorator order @Transactional() above @CloudFunction meant the transaction never opened. The registry now re-reads the method when it registers it, so either order works.

When something will not start

  1. Is experimentalDecorators set?
  2. Did importFiles print the files it loaded — and are they the compiled ones?
  3. Did the registries initialise after Parse Server was mounted?
  4. Read the boot output for [Triggers], [Indexes], [Versioning] and [Cron] lines. Most of what used to be silent now appears there.