NodeJS 我可以不使用res.render / return info给用户而用express渲染html吗?

9rygscc1  于 2023-03-12  发布在  Node.js
关注(0)|答案(2)|浏览(107)

我希望以呈现大多数其他页面的方式呈现HTML,使用res.render(),它被设置为使用手柄。
但是我不想只返回HTML,我想把HTML放进一个对象,沿着一些其他的信息,然后返回它。
我知道我可以加载一个新的handlebar示例,但我不想这样做,因为我需要所有的helper和partials。有没有一种方法可以使用res.render使用的handlebar示例进行渲染,但只返回HTML?
我想做这样的事情:

router.get('/list', function(req, res, next) {
  Users((err, users)=>{
    if (err) console.log(err);

    var html = res.render('user-list', {
        layout: false,
        users: users,
    });

    res.json({
        html: html,
        otherInfo: otherInfo
    });
  });
});'

但显然不能这样做,因为res.render将开始向用户发送HTML。
有什么建议吗?
编辑:我想明白了,只是不能接受我自己的答案

yvfmudvl

yvfmudvl1#

使用req.app访问express示例,该示例具有方法render,该方法将返回HTML。该函数是异步的,因此需要提供回调,而不是将其设置为变量。
应用程序渲染()文档

6rvt4ljy

6rvt4ljy2#

stackers提供的解决方案非常好用。但是,我的视图无法访问应用程序的对象。例如,我无法从i18next包访问我的翻译。因此,我想提出另一个解决方案inspired by zemirco,res.render with third parameter:

res.render('viewName', {content: 'content to pass'}, function(err, html) {
    if (err) {
        // do your error handling here
    } else {
        res.setHeader('Content-Type', 'text/html');
        res.status(200).end(html);
        
        // When returning html in JSON-Object you might have to escape it
        res.json({
            html: html,
            otherInfo: otherInfo
        });

    }
})

相关问题