我很难理解node.js究竟是如何为动态内容提供服务的。 所以我们假设我们有以下代码来呈现主页:
var express = require('express'),
app = express();
app.get('/', function(req,res){
res.render('home.html');
});
但是,假设这个主页应该是一个用户配置文件,您在其中从数据库中提取用户信息,从而产生代码:
var express = require('express'),
mongoose = require('mongoose'),
app = express();
mongoose.connect('mongodb://localhost/ExampleDB');
app.get('/:id', function(req,res){
User.findOne({_id: req.id}, function (err, user){
var name = user.name;
var profilePic_uri = user.profilePic_uri;
res.render('home.html');
});
因此,理想情况下,home.html只是一个模板页面,您可以在路径处理程序中设置用户的个人资料图片,他们的名字等。是的,因为节点背后的想法是,这个app.js应该能够处理在运行时从数据库中提取动态内容。我遇到麻烦的地方是了解如何使用节点精确渲染动态页面。 html页面是一个静态页面。你不能真正渲染一个php或一个asp页面,因为它确实没有意义吗?
这让我想到了问题,它是如何完成的?
答案 0 :(得分:7)
如果你添加......
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
...在app = express()完成之后,如果你不使用扩展,它现在将默认为Jade渲染引擎。然后在你的路由器中:
app.get('/', function(req,res){
res.render('home', {
var1: 'val1',
var2: 'val2'
});
});
您需要将Jade添加到依赖项中项目的package.json文件中:
"jade": "~1.9.1",
...然后在你的文件夹中使用“npm install”将其带入。
然后你需要一个名为/views/home.jade的文件,内容为:
doctype html
html
body
p Var1 is #{var1}
p Var2 is #{var2}
您应该看到 - 当您访问主页时 - 这些值已经传递到Jade渲染引擎并在模板中分别作为'val1'和'val2'扩展。
答案 1 :(得分:4)
在您的情况下,页面是静态的。这里有模板引擎(视图引擎),您可以使用它来呈现页面动态的内容。
我现在记得的一些模板引擎是vash(它就像来自MVC的razor语法,我喜欢它)和jade。还有更多。
注意:您可以在我提供的链接中找到如何将它们与 express 集成。
答案 2 :(得分:1)
你实际上问的不是,它在Node中是如何工作的,而是Express如何呈现模板。一旦您了解到您实际使用快速模块的功能,您可能更了解搜索所需内容以获取正确的文档。
简而言之:Express具有模板渲染引擎,可以为您完成工作,非常类似于ASP或PHP。
要了解Node,我建议首先尝试构建没有所有库的东西,只是为了了解平台,并了解为什么使用这些库或框架是可行的(如快递)。
答案 3 :(得分:0)
您可以使用模块 [Templatesjs] 1来呈现动态数据
此模块可以轻松完成您想要的工作,您可以使用此功能将动态数据呈现到html页面。
让我给你举个例子:
<html>
<body>
Welcome Dear <%username%>
<img src="img/<%pic_url%>" />
</body>
</html>
现在我们必须在页面中呈现名称和 pic_url 。 在你的node.js代码
中var express = require('express'),
mongoose = require('mongoose'),
app = express(),
tj = require('templatesjs');
mongoose.connect('mongodb://localhost/ExampleDB');
app.get('/:id', function(req,res){
User.findOne({_id: req.id}, function (err, user){
var name = user.name;
var profilePic_uri = user.profilePic_uri;
var data = fs.readFileSync('./home.html');
//now do the main thing
tj.set(data); // invoke templatesjs with data
var output = tj.render("username",name); // this will replace <%username%> with actual username
output = tj.render("pic_url",profilePic_uri);
res.write(output);
res.end()
});
现在你完成了。您可以从here
获得很好的帮助希望