我目前正在构建一个Keystone.js项目,并且需要使用一些Express.js中间件库。由于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
,这是为什么我试图以这种方式使用它。
不幸的是,而我的梯形的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/*')还是来自你自己站点的路由? – JME 2015-02-23 23:51:37
忘记了问,您使用的是什么版本的KeystoneJS? – JME 2015-02-24 00:24:45
嗯,我基本上打开我的浏览器并导航到本地主机:3000 - 这就是我的意思*试图加载我的网站上的任何页面* - 抱歉的歧义。另外:我使用的是keystone 0.3.0。我的项目是由keystone yeoman生成器生成的,所以它是股票安装。 – rdegges 2015-02-25 00:29:19