【问题标题】:How to build large scale express.js sites如何构建大型 express.js 网站
【发布时间】:2018-06-14 16:15:57
【问题描述】:

我对 node.js 和 express.js 领域还很陌生。但是,我一直在尝试在 express.js 中创建网站(例如 20 多页)背后的代码,而代码不会变得非常大。

当使用视图引擎时,路由会将传入请求指向索引或他们请求的任何页面。在将视图引擎设置为 HBS 的情况下运行默认的 express-generator 后,您会得到类似

app.use('/', index);

这指向路由文件夹下的 index.js 文件,其中包含类似的内容

router.get('/', function(req, res, next){
 res.render('index', {title: 'Express'});
});

然后渲染 index.hbs 文件以在页面上显示我想要的内容。

我的问题是这个。您是否必须为您想要的每个页面设置一个路由,例如个人资料页面、登录页面、关于页面等?如果是这样,如果您有 20 多条路线,这不会在路线中创建很多代码行吗?示例将在 app.js 中

app.use('a', a);
app.use('b', b);
...
app.use('z', z);

那么每个都需要一个对应的路由js文件。

我认为有一种更简洁的路由方式,还是我想多了?

任何关于我的这个担忧/问题的观点都会令人惊叹。

【问题讨论】:

  • 你不能把所有的路由都放在一个 route.js 文件里吗?
  • 理论上你可以将它们组合在一起,也许这会减少所需的 app.use 语句。我不知道 express.js 中路由的标准是什么,但这仍然需要您在路由 js 文件中指定每个路由。
  • 路径支持参数,一个基本的例子是app.get('/:page/', ...)。您可以使用req.params.page 引用该参数。这样您就不必明确说明每条路线。

标签: javascript node.js express express-router


【解决方案1】:

在我的快速服务器中,我将路由分成称为“组件”的不同部分,如果您正在执行服务器端渲染,每个组件都可以对应于给定页面,或者它可以对应于一组 API 路由。

每个组件都可以有控制器来处理每个路由,每个控制器都可以借鉴一些可重用的操作。

这是我制作的 express 服务器组件的示例(此示例用于一组 API 路由,但相同的架构可用于一组 hbs 服务器端渲染路由):

https://github.com/AkyunaAkish/react-redux-node-express-todo-list-boilerplate/tree/master/server/components/todos

【讨论】:

  • 太棒了,谢谢。这与其他 cmets 一起清除了问题。
【解决方案2】:

这取决于您的路线有多相似:

  • 如果它们基本上都具有相同的功能,我会将它们放在同一个文件中。
  • 如果有细微的变化,我会创建一个包含核心函数的单独类,然后分别调用需要的内容。
  • 如果它们完全不同,请将它们全部放在单独的文件中

这将为您提供每个操作的可靠大纲:

【讨论】:

  • 很棒的答案!谢谢
【解决方案3】:

通常,您可以围绕关注区域创建路由文件,尽管给定的路由器可以定义任何有意义的端点。例如,假设您的网站有几个相当静态的页面(例如,您的“关于”和“索引”示例,然后是几个都基于博客条目(创建、列表、查看等),然后是周围的几个用户(用户配置文件等)。您可能会为每组事物创建一个路由器,例如:

// ./routes/index.js
router.get('/', (req, res) => { res.render('index', {title: 'Express'}); });
router.get('/about', (req, res) => {res.render('about', {title: 'Express'});});
// etc

从概念上讲,您可以更简单地使用它来从 URI 中提取“index”或“about”值,但我假设您会做其他事情,例如分配变量等。

然后在另一个文件中

// ./routes/blog.js
router.get('/blog', (req, res) => { 
   // do whatever to fetch info fromt eh DB and render it... 
});

等等。

【讨论】:

    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多