解析服务器为 PUT 而不是 GET 返回“{"code":111,"error":"This is not a valid File"}”。为什么?

Parse Server returning "{"code":111,"error":"This is not a valid File"}" for PUT but not GET. Why?

我正在努力完成从 Parse.com 到 Parse Server 的迁移,但无法更新任何数据。 GET 工作得很好,无需修改之前使用 Parse.com 的任何现有代码。

我得到了任何 PUT 的变体:

{
    method:"PUT"
    path:"/parse/classes/Order/WzxHamIlOq"
    status:400
    text:"{"code":111,"error":"This is not a valid File"}"
}

/parse/classes/Order/WzxHamIlOq 的 GET 工作完美。

我查看了 111 代码,文档中唯一引用它的内容似乎不适用。

下面是不起作用的代码:

    OrderController.updateOrder = function(req, res) {
        var order = req.body;
        superagent
            .put(config.API_URL + '/classes/Order/' + order.objectId)
            .set('X-Parse-Application-Id', config.keys.appId)
            .set('X-Parse-Master-Key', config.keys.master)
            .send({
                'orderNo': order.orderNo,
                'poNO': order.poNO,
                'invoiceNo': order.invoiceNo,
                'dueDate': order.dueDate,
                'dateIn': order.dateIn,
                'jobName': order.jobName,
                'notes': order.notes,
                'salesmanID': {
                    __type: 'Pointer',
                    className: 'Salesman',
                    objectId: order.salesmanID.objectId
                },
                'costReview': order.costReview,
                'inProduction': order.inProduction,
                'invoice': order.invoice,
                'paid': order.paid,
                'commission': order.commission,
                'productionNotes': order.productionNotes,
                'proof': {
                    __type: 'File',
                    name: order.proof.name
                },
                'tags': order.tags,
                'artUrl': order.artUrl
            })
            .end(function(err, results){
                if(err) {
                    res.status(500).send({error: err});
                }else if(results.badRequest){
                        console.error(results.error);
                        res.status(results.status).send({error: results.error});

                }else {
                    res.send(results.body);
                }
            });
    };

这里是 GET 到相同路径的有效路径:

    OrderController.getOrderInfo = function(req, res) {
        superagent
            .get(config.API_URL + '/classes/Order/' + req.params.id)
            .set('X-Parse-Application-Id', config.keys.appId)
            .set('X-Parse-Master-Key', config.keys.master)
            .query('include=salesmanID,imprintTypeID,customerID')
            .query('where')
            .end(function(err, results) {
                if(err) {
                    console.log(err);
                } else if(results.badRequest){
                    console.error(results.error);
                    res.status(results.status).send({error: results.error});

                }else {
                    res.send(results.body);
                }
            });
    };

是的,使用 Super Agent 而不是 sdk 是愚蠢的。是的,我确实继承了这段代码。

任何人都可以指出正确的方向吗?

问题是 Parse 数据库迁移工具不支持从 Parse 传输文件。

github 上有一个活跃的问题,但还没有官方解决方案:https://github.com/ParsePlatform/parse-server/issues/8

这些行是导致问题的原因:

'proof': {
    __type: 'File',
    name: order.proof.name
},