在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
};
答案 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>