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

本文关键字:部署 错误 dpd js put 参数 Node get id      更新时间:2023-09-26

基本上标题所说的 - 我在为"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 值都存在于已部署的仪表板中,我能够使用 ID 以外的任何类别参数发出 get 请求。

感觉我已经尝试了一切,请帮忙!

如果通过与部署的客户端不同的客户端插入文档,则可能会发生此错误。

从这里:

MongoDB使用ObjectIds作为_id字段的默认值,如果未指定_id字段...如果客户端不添加_id字段,mongod 将添加一个包含 ObjectId 的_id字段。

尽管 mongoDB 创建的 ID 在部署的仪表板中可见,但它们不是普通字符串(如部署生成的 ID),并且 deployd 在查找字符串时找不到它们。

尝试使用任何其他mongoDB客户端(例如Robomongo)运行如下所示的查询:

db.yourcollection.find({_id: ObjectId("some_id_you_know_exists_in_collection")})

如果未引发错误,则 id 很可能是不是由 deploy 创建的 ObjectId。

不幸的是,没有简单的解决办法。(至少对于大型集合和复杂的应用程序而言,并非如此。对于小型集合,我建议将数据复制到新集合中,并让部署创建新 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);
            };
        })
    });
})

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

部署创建任何集合的 crud API。
确保集合名称正确 尝试使用
http://localhost:PORT/items/id ..如果这也将给出 404,则打开
http://localhost:PORT/dashboard/items/events/
和在仪表板上转到仪表板/项目/事件/这将在 GET 面板上打开,写在那里控制台.log(this.query)

和大约 400 个请求,你写代码控制台.log(this.body) 上http://localhost:PORT/dashboard/items/events/#put-panel

这是调试 API 的方法,部署有一些问题,但更好的框架可以立即创建 API