【问题标题】:Keystone Tutorial: cannot read property 'id' of undefinedKeystone 教程:无法读取未定义的属性“id”
【发布时间】:2019-09-14 11:45:00
【问题描述】:

我正在学习从头开始 KeystoneJS 的教程。但是当我进入教程的第二部分,创建数据模型时,我得到了这个错误:

Error thrown for request: /keystone/
TypeError: Cannot read property 'id' of undefined
    at IndexRoute (/root/websie/node_modules/keystone/admin/server/routes/index.js:39:16)
    at Layer.handle [as handle_request] (/root/websie/node_modules/express/lib/router/layer.js:95:5)
    at next (/root/websie/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/root/websie/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/root/websie/node_modules/express/lib/router/layer.js:95:5)
    at /root/websie/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/root/websie/node_modules/express/lib/router/index.js:335:12)
    at next (/root/websie/node_modules/express/lib/router/index.js:275:10)
    at /root/websie/node_modules/keystone/admin/server/app/createDynamicRouter.js:26:3
    at Layer.handle [as handle_request] (/root/websie/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/root/websie/node_modules/express/lib/router/index.js:317:13)
    at /root/websie/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/root/websie/node_modules/express/lib/router/index.js:335:12)
    at next (/root/websie/node_modules/express/lib/router/index.js:275:10)
    at handleUploadedFiles (/root/websie/node_modules/keystone/lib/uploads.js:6:54)
    at Layer.handle [as handle_request] (/root/websie/node_modules/express/lib/router/layer.js:95:5)
GET /keystone/ 500 8.835 ms

由于我是 Keystone JS 的新手,我不太清楚这个问题是出在代码本身还是数据库上。

需要考虑的事项:

  • 这是在 linux 环境下运行的
  • MongoDB 是全新安装的

这些是目前为止的所有文件:

keystone.js

const keystone = require('keystone')

keystone.init({
        'cookie secret': 'SECRET KEY',
        'name' : 'theproject',
        'user model' : 'User',
        'auth' : 'true',
        'auto update' : 'true',
});

keystone.import('models');

keystone.start();

用户.js:

const keystone = require('keystone');

var User = new keystone.List('User');

User.add({
    displayName: { type: String },
    password: { type: keystone.Field.Types.Password },
    email: { type: keystone.Field.Types.Email, unique: true },
})

User.schema.virtual('canAccessKeystone').get(function () {
    return true;
});

User.defaultColumns = 'id, displayName, email';

User.register();

【问题讨论】:

  • 如果解决了您的问题,请标记答案。

标签: node.js keystonejs


【解决方案1】:

您的用户模型没有“id”属性。因此,当您将 User.defaultColumns 设置为“id”时,它什么也找不到。

然而,所有模型都有一个“_id”属性。

我会从您的默认列中删除“id”并继续前进。

User.defaultColumns = 'displayName, email';

如果这不能解决问题,您可能会在其他地方请求 id。

【讨论】:

  • 我还能在哪里请求 id?
  • 可能在您的路线中,甚至可能在您尝试渲染的 pug 文件中。您的 keystone.js 文件中有 id 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 2018-10-01
  • 2021-06-27
  • 2021-05-20
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多