在Express.js中捕获所有根级别路由:考虑因素并保留可能的路由以供将来使用?

时间:2012-11-02 23:40:50

标签: node.js routing express

我正在使用Express.js(3.0)来开发Node web应用程序;我想为两个用户配置文件提供干净的URL:

domain.com/username

以及每个用户创建和分享的页面:

domain.com/username/pagename

我真的更喜欢使用干净的网址来使用 domain.com/profile/username domain.com/pages/username/pagename 之类的内容。

我们开发的当前路由配置是自动引导的:

app.get('/', content.home);
app.get('/about', content.about);
app.get('/signup', users.signup);
app.get('/login', users.login);
app.get('/:user', users.profile);
app.get('/:user/:userpage', userpage.render);

最后两个是抓住所有路线。现在这很好用,但我不确定这是不好的设计或实现。

更重要的是,我想保留100个左右的页面名称以供将来使用,例如“联系”,“职业”,“取消”,“定价”等。我不打算推​​出这些名称页面,但我想知道我是否可以创建一个捕获这些请求的路由文件并将它们发送到占位符页面,而不是将它们评估为用户配置文件或用户生成的页面。

我显然可以防止创建这些用户名,但是必须有一种创造性的方法来处理路由,并且在使用catch-all根级别路由时理解任何其他注意事项 - 这可能会导致数据量过大由于用户和页面查找不存在的对象或页面而产生的压力。

2 个答案:

答案 0 :(得分:2)

您可以执行的操作类似于以下代码段。这是咖啡脚本,但一般理论是一样的。

placeholder = (req, res, next) ->
  res.render 'placeholder'

reserved = ['/contact','/careers','/cancels','/pricing']

each page in reserved
  app.get page, placeholder

app.get '/:user', ....

如果您决定要添加额外的占位符页面,只需将其添加到该阵列中并重新启动应用程序即可。

答案 1 :(得分:0)

我不是百分百肯定,但是如果你把所有路线都放在:用户之上,那么注册你的页面名称的用户将无法显示。