使用Node.js提供动态网页

时间:2015-05-25 18:37:33

标签: html node.js express

我很难理解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页面,因为它确实没有意义吗?

这让我想到了问题,它是如何完成的?

4 个答案:

答案 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

获得很好的帮助

希望