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);
            };
        })
    });
})

你必须自己决定是否适合你。