为了获得有效的解决方案,您可以首先使用两个 npm 模块来帮助您发送正确的数据。
假设您想发送一些动态数据的 html 格式,您希望使用 html/pug/ejs/handlebars 发送数据,因为如果您的路由器需要处理,您也可以在那里发送数据。
您可以使用node-email-templates 将其他平台的html 转换为内联css 到css 文件中的html。请参阅链接以了解更多信息。
虽然您没有发送电子邮件,但您可以使用它。
现在,您想从您的路线发送此信息,以下是示例:https://github.com/niftylettuce/node-email-templates/tree/master/examples
现在,您已经生成了带有 css inline 的 html 格式,您需要将生成的 HTML result.html 作为响应发送,但是您需要知道根据请求要呈现哪些数据,所以您可能需要设置多条路线,或者您可以使用params 或query 进行一条:
我主要使用它来将 css 内联嵌入到 html,但您可以简单地执行 res.send() 并在您的主 html 中使用 css(您接收它的地方)。
路由器
var EmailTemplate = require('email-templates').EmailTemplate;
var path = require('path');
router.get('/api/:page', function(req, res){
if (req.params.page == 'home')
{
//set the directory to your html here : /views/home contains html.pug
// and style.css
var templateDir = path.join(__dirname, '..', 'views', 'home');
var page = new EmailTemplate(templateDir);
}
var user = {name: 'Joe', pasta: 'spaghetti'}
page.render(user, function (err, result) {
// NOTE: I am passing user object which you can use to render data same as res.render('', user: user).
// so in your template user.name will be rendered as Joe and user.pasta will be rendered as spaghetti
// result.html
res.status(200).send(result.html);
});
});
现在您可以使用 jquery AJAX 或 axios 来接收和应用您喜欢的任何一个。
HTML:
您可以将data-page 附加到您的链接(或您希望用户单击的任何内容)并将其设置为适当的值。
...
<li class="nav-links"><a href="#" data-page="home">Home</a></li>
<li class="nav-links"><a href="#" data-page="about">About</a></li>
...
<div class="main-content">
<!-- content to be added here -->
</div>
...
JS
我正在使用 jQuery。
$('.nav-links a').click(function(e){
var page = $(this).attr('data-page');
$.ajax({
method: "get",
url: "/api/"+page,
success: function(response){
$('.main-content').empty().append(response);
}
});
});
希望对您有所帮助。 :)