Unsupported `__op` value in a write request returns HTTP 500

Ouverte Adaptée aux débutants
#10,841 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@RagedPanda y travaille déjà.

Depuis le 29/10/2026.

  • #10844 par @RagedPanda — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
javascript, mongodb, nodejs, postgres
Domaine
api, backend, databases

Piste de recherche

Commencez par lire SchemaController.getObjectType et suivez la manière dont les requêtes d’écriture valident les objets d’opération avant d’atteindre les adaptateurs de stockage. Examinez les erreurs existantes des adaptateurs et les tests associés pour repérer les valeurs __op non prises en charge. Le travail est terminé lorsque les requêtes de création et de mise à jour avec SetOnInsert ou un opérateur inconnu renvoient une erreur client indiquant l’opérateur non pris en charge, au lieu de HTTP 500.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

New Issue Checklist
Issue Description

A create or update whose field value is an operation object with an __op value that the REST API does not support returns HTTP 500 instead of a client error. This applies to SetOnInsert, which #8791 added for the server-side database API only, and to any unknown operator name.

SchemaController.getObjectType throws a plain string ('unexpected op: <name>') for an operator it does not know. The thrown value is not an Error, so it reaches the client as Internal server error and is logged without a message. The storage adapters reject such operators with a Parse error (COMMAND_UNAVAILABLE, "The operator is not supported yet."), but schema validation runs first and never gets there.

Steps to reproduce
  1. POST /classes/Thing with body {"counter": {"__op": "SetOnInsert", "amount": 1}}.
  2. PUT /classes/Thing/<objectId> with the same body.
  3. Either request with {"counter": {"__op": "Foo"}}.

All with the master key; the behavior is independent of ACL and class-level permissions.

Actual Outcome

HTTP 500 with {"code": 1, "message": "Internal server error."}. The server logs Uncaught internal server error. with no message or stack, because a string was thrown.

Expected Outcome

A client error that names the unsupported operator, for example HTTP 400 with Parse.Error.COMMAND_UNAVAILABLE (code 108) as the storage adapters already return, or Parse.Error.INCORRECT_TYPE (code 111). No HTTP 500.

Environment

Server

  • Parse Server version: 9.10.7
  • Operating system: macOS
  • Local or remote host (AWS, Azure, Google Cloud, Heroku, Digital Ocean, etc): local

Database

  • System (MongoDB or Postgres): MongoDB (the error occurs in schema validation before the storage adapter, so Postgres is expected to behave the same)
  • Database version: 8.0
  • Local or remote host (MongoDB Atlas, mLab, AWS, Azure, Google Cloud, etc): local

Client

  • SDK (iOS, Android, JavaScript, PHP, Unity, etc): REST API
  • SDK version: n/a
Logs
error: Uncaught internal server error.
Langage dominant
JavaScript
Étoiles
21.4k
Forks
4.8k
Merge moyen
7 h 8 min
PR mergées (30 j)
65

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de parse-community/parse-server

Toutes les issues de parse-community/parse-server

Issues similaires

Plus d'issues JavaScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.