使用Node JS和Express一次调用多条路由的理想方式

时间:2019-07-10 05:56:59

标签: javascript node.js express asynchronous routes

在node和express中调用多个路由或一次渲染多个路由的理想方法是什么?例如,如果我有2条路线是app.get('/',route.views.index);和app.all('/ header',routes.views.header);当app.get('/',route.views.index);渲染,那么它还应该渲染app.all('/ header',route.views.header);。许诺是该回调数组的好解决方案吗?任何想法? 。还是异步? 。想要一次呈现索引路由和标头路由。当索引路由被调用时,我也想包含标头,因为标头路由包含标头的数据     并且标头已扩展/包含在索引上,因此两者都应呈现

路由绑定

exports = module.exports = function (app) {

    app.get('/', routes.views.index);
    app.get('/blog/:category?', routes.views.blog);
    app.get('/blog/post/:post', routes.views.post);
    app.get('/gallery', routes.views.gallery);
    app.all('/contact', routes.views.contact);


    app.all('/header', routes.views.header);



    //Views for vehicle
    app.get('/searchnew/:category?', routes.views.vehicle)

    app.get('/:parent/:slug?', routes.views.pages);

    // NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
    // app.get('/protected', middleware.requireUser, routes.views.protected);

    // User
    app.get('/api/user', [keystone.middleware.api, keystone.middleware.cors], routes.api.user.list);
    app.get('/api/user/:id', [keystone.middleware.api, keystone.middleware.cors], routes.api.user.get);
    app.post('/api/user', [keystone.middleware.api, keystone.middleware.cors], routes.api.user.create);
    app.put('/api/user/:id', [keystone.middleware.api, keystone.middleware.cors], routes.api.user.update);
    app.delete('/api/user/:id', [keystone.middleware.api, keystone.middleware.cors], routes.api.user.remove);

    //Vehicle API





};

1 个答案:

答案 0 :(得分:1)

更新:OP希望发送2个HTTP请求,一个请求获取页面(调用/路由器),另一个请求调用/header路由器以呈现动态内容。

在这种情况下,您可以:

步骤1.打开主页(发送GET / HTTP请求)。在此步骤中,将呼叫路由器/

步骤2。主页完全加载完毕(例如,监听window.onload事件)后,发送Ajax请求以获取动态标头内容(GET /header)。在此步骤中,将呼叫路由器/header

步骤3。返回动态标头内容后,使用JavaScript在当前页面中呈现该内容。


旧答案:

您不需要“呼叫多条路线”。您需要的是“调用一条路由”(发送一个HTTP GET请求),并在渲染引擎中组成多个视图组件(例如nunjucks)。

例如,当HTTP请求为GET /时,服务器将收到此请求,并尝试呈现相应的模板(例如index.html)。如果需要嵌入“标头”组件,则可以使用渲染引擎技术来组成它:

// In router file, render template for "/"
router.get('/', function (req, res) {
  res.render('index');
});

// In "index" template file, embed "header" component
<!doctype html>
<html lang="zh-CN">
...
{% include "header.html" %}
...
</html>