解析服务器为 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
},
我正在努力完成从 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
},