Keystone Tutorial: невозможно прочитать свойство 'id' из неопределенного - PullRequest
0 голосов
/ 25 апреля 2019

Я следовал руководству по запуску 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();

user.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();

1 Ответ

0 голосов
/ 25 апреля 2019

Ваша модель пользователя не имеет атрибута "id". Поэтому, когда вы устанавливаете свой User.defaultColumns в «id», он ничего не находит.

Однако все модели имеют атрибут "_id".

Я бы просто удалил "id" из ваших столбцов по умолчанию и двинулся вперед.

User.defaultColumns = 'displayName, email';

Если это не помогает, вы можете запросить идентификатор в другом месте.

...