【问题标题】:How to add new fields to a list in KeystoneJS如何在 KeystoneJS 的列表中添加新字段
【发布时间】:2019-02-17 13:00:04
【问题描述】:

我想在 KeystoneJS 中扩展博客,方法是向 Post 模式添加一个布尔“frontPage”字段,我想用它在主页上显示选定的帖子。

我想出了我放在更新文件夹中的这段代码:

var keystone = require('keystone');
var async = require('async');

exports = module.exports = function (done) {
    let post = keystone.list('Post');

    post.add({
        frontPage: Boolean
    });
    done();
};

它似乎可以工作,但是当我重新启动服务器时更改不会持续存在。所有文档都描述了创建新列表的过程,但没有一个说明如何修改现有列表。还尝试在末尾添加post.register(),但没有运气。

是否有保存新模式的功能,或者我应该为此在 Keystone 之外编写一个 shell 脚本?

谢谢

【问题讨论】:

    标签: keystonejs


    【解决方案1】:

    它似乎可以工作,但是当我重新启动服务器时更改不会持续存在。

    application updates folder 中的脚本用于数据导入或迁移,并且有意仅对给定部署应用一次。

    所有文档都描述了创建新列表的过程,但没有一个文档说明如何修改现有列表。

    要在模型中添加、删除或更改字段,您应该修改 Keystone 项目中的文件(例如:models/Post.js),然后重新启动应用程序以获取更改。

    通常不需要创建相应的update 脚本,除非您想包含相关的数据更改(例如,为现有文档设置值)。

    【讨论】:

    • 这比我预期的要容易得多。谢谢@Stennie 的回答。顺便说一句,我想知道它在幕后是如何工作的:当模型有一个在 db 模式中不存在的新字段时,我想它会被添加,但如果一段时间后我删除该字段怎么办?我认为这与 MongoDB/NOSQL 数据库的工作方式有关:新条目将没有该字段,而具有该字段集的先前条目将保持原样?
    • @user3420936 您的期望是正确的:更新 Mongoose/Keystone 中的声明性架构不会影响数据库中的任何现有文档。 Keystone 的应用程序更新可用于一次性数据操作,例如从文档中删除未使用的字段或使用导入的值填充新字段。模型和关系的一般行为由Mongoose schemas 提供。 Keystone 列表本质上是一个带有一些额外 UI 注释的 Mongoose 模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多