使用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() }); 

现在你完成了。 你可以从这里得到一个很好的帮助

希望