node.js - Keystone 教程:无法读取未定义的属性“id”
问题描述
我正在关注从头开始启动 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();
解决方案
您的用户模型没有“id”属性。因此,当您将 User.defaultColumns 设置为“id”时,它什么也找不到。
然而,所有模型都具有“_id”属性。
我会从您的默认列中删除“id”并继续前进。
User.defaultColumns = 'displayName, email';
如果这不能解决它,您可能会在其他地方请求 id。
推荐阅读
- sass - SASS - 如何将 style.scss 与 style.css 文件同步?
- unity3d - Gamesparks:将玩家从未决比赛中移除
- angular - 地图上方的 Bootstrap Angular Leaflet Div
- liferay - 显示用户个人栏
- regex - Azure 特殊字符正则表达式包含错误,但我无法找出哪些错误
- python - Webdriver Selenium 中是否存在“好像”浏览器的最大化模式,但实际上是最小化的?
- c# - 需要带有自定义关键字的语音识别引擎的指导 c#
- spring - 如何使用 Thymeleaf 内联 JavaScript
- javascript - 在javascript中显示多维对象数组的结果
- android - 找到离给定位置最近的折线索引