1
paloalto 2014-07-17 01:31:36 +08:00
是个可供学习的好案例,看楼下有没有好的解决办法。
|
2
rankjie 2014-07-17 02:19:22 +08:00 via iPhone 1
简单点嘛,后面的 admin、newadmin 都拿来当URL参数处理不就好了
app.get "/:admin_path", (req, res)-> 存个字典找下每个 admin_path 对应的用户,或者直接存数据库,从数据库里找不就可以了吗……… 然后在 /:admin_path 下面的路径,加个中间件把对应的用户放到 res.admin_user 就可以了 比如 app.get "/:admin_path/test", fetchUser, (req ,res)-> 不知道我对lz的意思理解的对不对 |
3
liteneo 2014-07-17 09:40:25 +08:00 1
我觉得简单的做法就是301跳转,永久重定向到新的admin_path,这样所有的/admin路由都可以统一处理,根据当前用户设置的admin_path然后永久重定向过去,二楼每次都需要轮询代价有点大吧。。。
|
4
serenader OP @rankjie 感谢回复。是的,你没有理解错我的意思。
其实你的这个思路我之前也有想到过。在 StackOverflow 上面我也找到了类似这个问题的一个答案,其思路也是你这样的。 但是其实在这个地址后面我还有很多路由请求要处理,比如说 app.get('/admin/post') app.post('/admin/post') app.get('/admin/setting') app.post('/admin/setting') 等等。如果采用你这种方法的话,那么,经过 /admin/ 这个路径的请求都要查询一次数据库,这对网站的性能有很大影响吧? 另外不知道你有没有注意到,其实我是用 app.use(app.locals.adminPath, Router) 这样的方法处理路由请求的。这样的话,程序运行的时候只会在刚开始运行的时候查询一次数据库。另外这样也比较方便,比如我想要处理 get /admin/post 的话,我只需在 Router 中绑定这样的处理: Router.get('/post', function (req, res, next){}); 这样在 Router 中就完全不用理会这个 /admin/ 这个路径了。 说了那么多,其实就是想表达,你说的这种方法会大量查询数据库,我个人觉得不是一个好办法。另外就是这种方法没办法用 app.use() 这个方法处理路由处理。 不过现在想想,其实重启一次程序也不是一件什么坏事。毕竟在生产环境中一般都会使用 supervisor 或者 forever 去让它永久运行的。所以如果说没有更好的办法的话,我也只能用最初的这种方法了。 |
6
jarlyyn 2014-07-17 09:58:15 +08:00 1
感觉应该前后台分离,然后后台修改后重启。
|
8
serenader OP |
9
rekey 2014-07-17 10:05:03 +08:00
更改了后台地址以后重启下 server,动态生成相关的 router,这个应该不难吧?
|
10
jarlyyn 2014-07-17 10:05:44 +08:00
|
11
serenader OP @rekey 现在我的方案就是更改之后就重启 server 。但是总觉得应该有个更优雅的方式,不用重启,达到这个目的。
|
13
serenader OP |
16
rekey 2014-07-17 10:17:22 +08:00
@serenader 简单来说,你就是不想放弃 express router 的便利性。又想能够动态的处理 url,其实二楼的方案真的写的很清楚了。
app.use() 其实已经可以直接处理掉一个 request 了。所以你认为 url 命中了以后可以直接调用相关的 router 处理。类似 app.use(function(req, res, next){ if(req.url){ require('./router/admin')(req,res,next); } }); |
18
gamexg 2014-07-17 11:12:50 +08:00
没用过 Express ,但是应该支持中间件。路由上固定为admin为管理地址。在中间件检测地址,如果是用户指定的管理地址则在中间件把地址修改为admin,之后路由还是一样处理。
不知道 Express 有url生成吗?有的话还得处理url生成部分。 |
19
rankjie 2014-07-17 12:10:34 +08:00 via iPhone
|
20
lijinma 2014-07-18 14:35:57 +08:00
|
21
favormm 2014-07-18 14:59:10 +08:00
我也不明白,有人详细介绍一下吗?
|