使用Node.js提供动态网页服务

8
我很难理解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只是一个模板页面,在其中您可以在路由处理程序中设置用户的个人资料图片、姓名等等。因为node的理念是,这个app.js应该能够在运行时从数据库中处理动态内容。我遇到的问题是,我不太明白如何使用node渲染动态页面。HTML页面是静态页面。你不能真正地呈现PHP或ASP页面,因为那并没有什么意义,对吧?这就让我有了一个问题,它是如何完成的?

你的问题是关于node.js还是Express如何呈现动态内容? - digwig
3个回答

9

If you add...

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'
  });
});

您需要在项目的package.json文件中添加Jade到依赖项:

    "jade": "~1.9.1",

在您的文件夹中运行 "npm install" 命令来安装依赖包。

接下来,您需要一个名为 /views/home.jade 的文件,并且其内容应包含以下部分:

doctype html
html
  body
    p Var1 is #{var1}
    p Var2 is #{var2}

当您访问首页时,您应该看到已将值传递给Jade渲染引擎,并在模板中展开为“val1”和“val2”。


5
在您的情况下,页面是静态的。这时就需要用到模板引擎(视图引擎),通过它可以使页面内容变得动态
我记得一些模板引擎,比如vash(类似于MVC中的razor语法,我很喜欢)和jade,当然还有其他的。 注意:您可以在我提供的链接中找到如何将它们与express集成的方法。

我对Jade有点了解。个人而言,他们的语法有点让人困惑。然而,根据我的理解,使用jade时,你会传入如下代码:res.render('home.jade',{name=user.name, profilePic=user.profilePic}.)。请注意,由于不熟悉jade及其语法,这是非常粗略的伪代码。在这种情况下,你是在说通过这种方式来实现动态页面服务吗? - cg14
@cg14 没错,这就是你将数据传递到页面的方式。你只需要在页面中使用它即可。这将使页面根据请求呈现不同的数据。 - adricadar

1
你实际上询问的不是Node的工作原理,而是Express如何渲染模板。一旦你明白你实际上使用了express模块的一个特性,你可能更清楚需要搜索什么才能获得正确的文档。
简而言之:Express具有一个模板渲染引擎,可以为你完成工作,与ASP或PHP非常相似。
要了解Node,我建议先尝试构建一些没有所有库的东西,只是为了了解平台,并理解为什么可以使用这样的库或框架(例如express)。

那么你的意思是使用模板渲染引擎是解决这个问题的方法?如果是这样,换句话说,Express如何渲染模板呢? - cg14
1
是的,您可以在Express中使用模板引擎。有很多选择,我个人最喜欢的是Swig。请查看文档以了解如何安装和配置模板(或者他们称之为“视图”)。 - Gerard van Helden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接