【发布时间】:2015-04-25 10:39:37
【问题描述】:
我目前正在构建一个Keystone.js 项目,并且需要使用一些Express.js 中间件库。由于 Keystone.js 是在 Express.js 之上构建的,这似乎相当容易,但到目前为止,我遇到了很多问题。
这是我目前正在尝试的(这是我对正确方法的最佳猜测):
在我的keystone.js 文件(应用程序的主入口点)中,我在keystone.start() 之前直接插入以下代码:
keystone.app.use(stormpath.init(keystone.app, {
...
}));
这里的重要一点是keystone.app.use(...); 位——我查看了 Keystone.js 源代码,似乎底层的 Express.js 应用程序对象公开为keystone.app,这就是为什么我要尝试以这种方式使用它。
不幸的是,虽然我的 Keystone Web 服务器在运行 $ node keystone.js 时启动,但尝试加载我网站上的任何页面都会导致以下异常:
$ node keystone.js
------------------------------------------------
KeystoneJS Started:
keystone is ready on port 3000
------------------------------------------------
TypeError: Object #<Object> has no method 'regenerate'
at doSignin (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/lib/session.js:38:15)
at Promise.<anonymous> (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/lib/session.js:72:5)
at Promise.<anonymous> (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
at Promise.EventEmitter.emit (events.js:95:17)
at Promise.emit (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
at Promise.fulfill (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
at Promise.resolve (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/lib/promise.js:114:23)
at Promise.<anonymous> (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
at Promise.EventEmitter.emit (events.js:95:17)
at Promise.emit (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
at Promise.fulfill (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
at /Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/lib/query.js:1400:13
at model.Document.init (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/lib/document.js:250:11)
at completeOne (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/lib/query.js:1398:10)
at Object.cb (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/lib/query.js:1155:11)
at Object._onImmediate (/Users/rdegges/Dropbox/Code/testing/keystone/node_modules/keystone/node_modules/mongoose/node_modules/mquery/lib/utils.js:137:16)
我已经让 MongoDB 在本地运行得很好,如果我注释掉上面的代码,一切都会按预期工作,所以我知道这是根本原因。
任何帮助将不胜感激。
【问题讨论】:
-
当说“尝试加载我网站上的任何页面”时,您是指 Keystone 路由(即
/keystone/*)还是来自您自己网站的路由? -
忘记问了,你用的是什么版本的 KeystoneJS?
-
啊,我基本上是在打开我的浏览器并导航到 localhost:3000 -- 这就是我的意思 尝试在我的网站上加载任何页面 -- 抱歉模棱两可。另外:我正在使用keystone 0.3.0。我的项目是由 keystone yeoman 生成器生成的,所以它是 stock install。
-
在我发布我建议的答案之前的最后一个问题。在您的启动脚本中的什么时候(我假设
keystone.js)您将keystone.app.use(stormpath.init(...))放在了哪里?你能分享你的keystone.js文件吗? -
太好了……谢谢!让我做一些故障排除,看看能否为您找到问题。
标签: javascript node.js express keystonejs