使用Node.js服务dynamic网页
我很难理解node.js如何提供dynamic内容。 假设我们有以下代码来呈现主页:
var express = require('express'), app = express(); app.get('/', function(req,res){ res.render('home.html'); });
不过,假设这个主页应该是一个用户configuration文件,在这个用户configuration文件中,您将从数据库中提取用户信息,从而生成代码:
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应该能够在运行时处理从数据库中提取dynamic内容。 我遇到麻烦的是了解如何完全呈现dynamic页面与节点一起工作。 html页面是一个静态页面。 你真的不能真正地呈现一个PHP或一个ASP页面,因为,这真的没有意义吗?
问题留给我了,怎么做?
如果你添加…
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",
…然后在你的文件夹中input“npm install”
然后你需要一个名为/views/home.jade的文件,其内容如下:
doctype html html body p Var1 is #{var1} p Var2 is #{var2}
当你访问你的主页的时候,你应该看到这些值已经被传递给Jade渲染引擎,并分别在模板中扩展为“val1”和“val2”。
在你的情况下,页面是静态的。 这里来玩模板引擎 (视图引擎),用这个可以渲染页面内容的dynamic 。
现在我记得的一些模板引擎是vash (就像MVC的剃刀语法,我喜欢它)和玉器 。 还有更多。
注意:你可以在我提供的链接中find如何将它们与express进行整合。
实际上你问的不是,它是如何在Node中工作的,但是Express是如何呈现模板的。 一旦你明白了你实际上使用了快速模块的function,你可能会更清楚你需要search什么来获取正确的文档。
简而言之:Express提供了一个模板呈现引擎,可以为您完成这项工作,与ASP或PHP的function非常相似。
为了了解Node,我build议先尝试构build一些没有所有库的东西,只是为了了解平台,并理解为什么使用这样的库或框架(如express)是可行的。
您可以使用module [Templates] 1来呈现dynamic数据
这个模块做你想要的工作很容易,你可以使用这个dynamic数据到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() });
现在你完成了。 你可以从这里得到一个很好的帮助
希望