发出HTTP GET请求以从客户端渲染车把模板

时间:2019-01-23 17:42:27

标签: node.js reactjs firebase express react-router

有几个与此问题类似的问题,但它们并没有真正提供有用的答案。此外,与其他问题不同,我有一部分方法可行。

我的应用程序利用了Firebase托管和Firebase云功能。在客户端,当用户单击按钮时,我想在特定路由上触发HTTPS函数,以根据从客户端发送的请求正文动态呈现Handlebars Template。使用Express,将是这样的:

// Using body-parser middleware with view engine set up:
app.get('/test-route', (req, res) => {
    const context  = req.body.context;
    res.render('my-template', context);
});

实际上,在浏览器中导航到/test-route是在屏幕上呈现模板的唯一方法(您不能从客户端发出Ajax或Fetch请求来呈现,因为这不是Ajax或Fetch的结果被设计用来做-他们不会更改页面的内容)。但这对我不起作用,因为我需要根据客户端发送的请求的主体动态呈现模板。

那么,我的想法是让Express路由将原始HTML从模板发送回客户端:

// Using body-parser middleware with view engine set up:
app.get('/test-route', (req, res) => {
    const context  = req.body.context;
    res.render('my-template', context, (err, html) => {
        res.send(html);
    });
});

现在的问题是,我具有来自客户端服务器上响应的文档的HTML,但是如何在/test-route路由下的新标签中显示HTML?

我的项目使用React和React Router,所以我想到了一个解决方案。除上述内容外,还应如下定义一条路线

<Route path="/test-route" component={PageIWantToRender}

,然后将该组件的内部HTML设置为来自客户端发出的GET请求的响应。为了到达那条路线,我必须使用一个<Redirect />组件。这样做的问题是,如果用户已经单击按钮以触发该函数以生成HTML,那么我仅需要用户能够转到该路线。

但是,我不确定这是否是正确的方法。

您能告诉我我已经提出的解决方案是可行的还是最佳实践,如果不能,那么用Express中基于req.body中的信息来呈现动态生成的模板的最佳方法是什么?可以通过客户端拨打电话的方式?

谢谢。

0 个答案:

没有答案