我正在使用keystone节点模块在我的应用程序中开发基于cms的页面。
我只是将keystone添加到我的js文件中来初始化keystone:var keystone = require('keystone');
但我目前面临的问题是,每个基于keystone的cms功能的路由是
的 localhost:3000/keystone/<featue-name>
我想从网址中删除keystone,并使用该应用程序所需的其他名称。在keystone的节点模块内部进行更改就可以了!
但如果我做了npm update
我的所有改变都是徒劳的。通常,在其他语言中,我习惯用METHOD OVERRIDING
来做。我不知道节点模块中的方法覆盖
还有其他办法吗?
答案 0 :(得分:3)
从我在the source中可以看到,管理路径前缀是可配置的(只是没有记录):
keystone.init({
...
'admin path' : 'your-own-path',
...
});
(这将使路径 localhost:3000/your-own-path/<feature-name>
)
如果您没有使用最新的Keystone,也许这可能有效(虽然这有点像黑客):
keystone.pre('routes', function(req, res, next) {
req.url = req.url.replace(/^\/your-own-path/, '/keystone');
next();
});
这样做会将请求的网址中的/your-own-path
前缀替换为/keystone
,有点像“内部重定向”。
答案 1 :(得分:1)
对node_modules
中的源代码进行更改并不是解决问题的好方法,因为它不受版本控制,因此处理回购的每个人都必须手动更改它。相反,您可以将repo分叉到您自己的Github帐户,进行更改,然后安装该版本的Keystone:
$ npm install --save keystone@git+https://github.com/your-username/keystone.git
更好的是,修改默认为/keystone
,但可以使用Keystone options进行更改,并将PR创建回Keystone!修复它之后的用法应该如下所示:
keystone.set('url', 'custom'); // Changes /keystone to /custom