Node.js 使用 id 参数时 dpd.get 部署 404 错误 & dpd.put 部署 400 错误
Node.js Deployd 404 error on dpd.get & 400 error on dpd.put when using id parameter
基本上如标题所说 - 我在为 "id" 输入的所有 ID 上都收到 404 未找到:
dpd.items.get("id", function(results, error) {
console.log(results);
});
以及对任何值 "id" 的 400 错误请求:
dpd.items.put("id",{category:value},function(results, error){
console.log("Record updated");
});
所有 ID 值都存在于 Deployd 仪表板中,我可以使用 ID 以外的任何类别参数发出获取请求。
感觉我已经尝试了一切,请帮忙!
部署创建任意集合的 crud API。
确保集合名称正确尝试使用
http://localhost:PORT/items/id ..如果这也会给404然后打开
http://localhost:PORT/dashboard/items/events/
在仪表板上转到 dashboard/items/events/ 这将打开 ON GET 面板,在那里写 console.log(this.query)
和大约 400 个请求,您将代码 console.log(this.body) 写在
http://localhost:PORT/dashboard/items/events/#put-panel
这是调试 API 的方法,部署有一些问题但更好的框架可以立即创建 API
如果您通过与部署不同的客户端插入文档,则会发生此错误。
来自here:
MongoDB uses ObjectIds as the default value for the _id field if the _id field is not specified ... if a client does not add an _id field, mongod will add an _id field that holds an ObjectId.
虽然 mongoDB 创建的 ID 在 deployd 仪表板中可见,但它们不是普通字符串(就像 deployd 生成的 ID)并且 deployd 在查找字符串时找不到它们。
尝试 运行 与任何其他 mongoDB 客户端(例如 Robomongo)进行如下查询:
db.yourcollection.find({_id: ObjectId("some_id_you_know_exists_in_collection")})
如果它没有抛出错误,则该 id 很可能是一个不是由 deployd 创建的 ObjectId。
不幸的是,没有简单的解决方法。 (至少不适用于大集合和复杂的应用程序。)
对于小型集合,我建议只将数据复制到一个新集合中,然后让 deployd 创建新 ID。
快速、肮脏且未经测试:
dpd.collection.get({}, function(res) {
_.each(res, function(object){
object.oldId = object.id //add id backup
delete object.id
// post new object without id -> deployd creates a new id
dpd.newcollection.post(object, function(res, err) {
if(err) {
console.log(err);
};
if(res) {
console.log(res);
};
})
});
})
你必须自己决定是否适合你。
基本上如标题所说 - 我在为 "id" 输入的所有 ID 上都收到 404 未找到:
dpd.items.get("id", function(results, error) {
console.log(results);
});
以及对任何值 "id" 的 400 错误请求:
dpd.items.put("id",{category:value},function(results, error){
console.log("Record updated");
});
所有 ID 值都存在于 Deployd 仪表板中,我可以使用 ID 以外的任何类别参数发出获取请求。
感觉我已经尝试了一切,请帮忙!
部署创建任意集合的 crud API。
确保集合名称正确尝试使用
http://localhost:PORT/items/id ..如果这也会给404然后打开
http://localhost:PORT/dashboard/items/events/
在仪表板上转到 dashboard/items/events/ 这将打开 ON GET 面板,在那里写 console.log(this.query)
和大约 400 个请求,您将代码 console.log(this.body) 写在 http://localhost:PORT/dashboard/items/events/#put-panel
这是调试 API 的方法,部署有一些问题但更好的框架可以立即创建 API
如果您通过与部署不同的客户端插入文档,则会发生此错误。
来自here:
MongoDB uses ObjectIds as the default value for the _id field if the _id field is not specified ... if a client does not add an _id field, mongod will add an _id field that holds an ObjectId.
虽然 mongoDB 创建的 ID 在 deployd 仪表板中可见,但它们不是普通字符串(就像 deployd 生成的 ID)并且 deployd 在查找字符串时找不到它们。
尝试 运行 与任何其他 mongoDB 客户端(例如 Robomongo)进行如下查询:
db.yourcollection.find({_id: ObjectId("some_id_you_know_exists_in_collection")})
如果它没有抛出错误,则该 id 很可能是一个不是由 deployd 创建的 ObjectId。
不幸的是,没有简单的解决方法。 (至少不适用于大集合和复杂的应用程序。) 对于小型集合,我建议只将数据复制到一个新集合中,然后让 deployd 创建新 ID。
快速、肮脏且未经测试:
dpd.collection.get({}, function(res) {
_.each(res, function(object){
object.oldId = object.id //add id backup
delete object.id
// post new object without id -> deployd creates a new id
dpd.newcollection.post(object, function(res, err) {
if(err) {
console.log(err);
};
if(res) {
console.log(res);
};
})
});
})
你必须自己决定是否适合你。