我刚接触Mongoose和Nodejs。
我希望允许用户在我的应用程序中定义一个Mongoose架构,并将其保存在数据库中。之后,他们也可以按照该架构创建文档。类似于无头CMS。
我已经能够通过API请求创建模式-但是我将如何保存模式以备后用。我可以在数据库中存储猫鼬模式吗?
所有模式都被创建为空,所以这里我需要的是唯一的名称
.table-cell.customhighlight {
-fx-background-color: rgba(0, 128, 0, 0.3);
}
.table-cell.customhighlight:selected {
-fx-background-color: inherit;
}
创建架构后,我向该模型添加了一些API路由
app.get(/create/:schemaName, (req, res) => {
let Schema = mongoose.Schema;
let myNewSchema = new Schema({
schemaName: {
type: 'String',
default: ''
},
attributes: {
type: Object,
blackbox: true
}
});
let model = mongoose.model(schemaName, myNewSchema)
functionThatAddRoutesToModel(model)
})
这一切都可行,但是如果我关闭节点服务器,则会丢失所有架构,所有功能都会消失。
是否可以将所有模式存储为数据库或JSON格式,然后在启动服务器时创建所有模式?
我还想强调一点,我对此很陌生-因此,如果您有替代的解决方案来创建像应用程序这样的无头cms,我将不知所措。
答案 0 :(得分:0)
为什么不让用户创建模式,为什么不创建不带属性的模式mongoose.Schema({}, { strict: false })
,并让用户使用所需字段存储文档。
strict选项(默认情况下启用)可确保传递给我们的模型构造函数的未在架构中指定的值不会保存到数据库中。
因此,当您将其设置为false时,这允许您向文档中添加属性。
示例:
const userSchema = new mongoose.Schema({}, {strict: false});
const User = mongoose.model('User', userSchema);
let user = new User({ name: 'foo'});
user.save(); // _id: 5cabbdfc82f0532f2e66a962, name:"foo", __v:0
let user2 = new User({ age: 15});
user2.save(); // id: 5cabbdfc82f0532f2e66a963, age:15, __v:0