首页 文章

loopback-mongodb-connector修改以支持slug id

提问于
浏览
3

我想在Loopback中使用slugs( String )而不是 ObjectID 来表示我在REST中暴露的一些对象

What the docs says about model ids:

默认情况下,如果未定义ID属性且模型选项的idInjection为false,则LDL会自动向模型添加id属性,如下所示:

id: {type: Number, generated: true, id: true}

我认为我只需要指定 String 作为类型,并且 generated: false 以避免该环回生成 ObjectId .

id: { type: String, generated: false, id: true },
  • 这根本不起作用

In the codemongodb.js 我看到无论我的 id 的名字是什么,它都包含一个 ObjectID 函数,它解释了 String 值的丢失 .

旁注:同样, generated 属性从未在mongodb连接器代码中使用,它的用途是什么?

到目前为止我的解决方案

添加我的架构定义的自定义属性(objectId,因为我不确定生成的是什么),该属性变为:

id: {
    type: String, 
    objectId: false, 
    id: true
},

然后我在 MongoDB.prototype.create@mongodb.js:155 中使用此属性如下:

var isObjectId = self.getDataSource(model)
                     .getModelDefinition(model)
                     .properties[idName]
                     .objectId;

if (idValue === null) {
    delete data[idName]; // Allow MongoDB to generate the id
} else {
    var oid = isObjectId ? ObjectID(idValue) : idValue; // Is it an Object ID?
    data._id = oid; // Set it to _id
    delete data[idName];
}

我以相同的方式更新了 save() 方法,现在我可以使用slug插入/修改对象,并从REST接口访问它们 .

问题

I'm not sure this is right, will it break something?

另外,我真的不喜欢修改依赖项的想法,所以我更喜欢使用官方方法,或者如果StrongLoop的人认为你可以使用它,那么就写一个pull请求 .

1 回答

相关问题