在此示例中,为什么 keystonejs 在启动时抛出未知列表错误?

Why is keystonejs throwing an unknown list error on startup in this example?

我用两个列表使用 keystone 做了一个小项目:User 和 Post。 Admin UI 没有给我任何问题,但查询任一列表都会引发错误(在本例中,对于 Posts)

ReferenceError: Unknown keystone list "Post"

检查我的 mongo 数据库显示有一个相应的集合,我可以从管理员 UI 正常添加和编辑。我的帖子代码,Post.js如下:

var keystone = require("keystone");
var Types = keystone.Field.Types;

var Post = new keystone.List("Post", {
  autokey: { path: "slug", from: "title", unique: true },
  map: { name: "title" },
  defaultSort: "-createdAt"
});

Post.add({
  title: { type: String, required: true },
  state: {
    type: Types.Select,
    options: "draft, published, archived",
    default: "draft"
  },
  author: { type: Types.Relationship, ref: "User" },
  createdAt: { type: Date, default: Date.now },
  publishedAt: Date,
  content: {
    brief: { type: Types.Html, wysiwyg: true, height: 150 },
    extended: { type: Types.Html, wysiwyg: true, height: 400 }
  }
});

Post.defaultColumns = "title, state|20%, author, publishedAt|15%";
Post.register();

这是直接从keystone documentation

复制粘贴的

以下代码片段,getPosts.js 是第 2 行发生错误的地方。

var keystone = require("keystone");
var Post = keystone.list("Post");

module.exports = function(req, res) {
  return res.json(Post.model.find({}));
}; 

我认为我没有偏离文档太远,有人能发现我在语法上做错了什么吗?如果有人需要查看更多信息以获得更好的想法,我有一个回购 here——它都在 keystone 目录中。

我发现了问题所在。当我初始化 keystone 时,我在导入模型之前导入了路由,这就是为什么它们(模型)从未在运行时设置,导致 keystone 抛出错误。如果您遇到类似问题,请务必仔细检查导入顺序 models/routes/etc.