我目前正在構建一個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