使用Node.js提供动态网页

cg1*_*g14 8 html node.js express

我很难理解node.js究竟是如何为动态内容提供服务的.所以我们假设我们有以下代码来呈现主页:

var express = require('express'),
    app = express();

app.get('/', function(req,res){
    res.render('home.html');
});
Run Code Online (Sandbox Code Playgroud)

但是,假设这个主页应该是一个用户配置文件,您在其中从数据库中提取用户信息,从而产生代码:

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');
});
Run Code Online (Sandbox Code Playgroud)

因此,理想情况下,home.html只是一个模板页面,您可以在路径处理程序中设置用户的个人资料图片,他们的名字等.是的,因为节点背后的想法是,这个app.js应该能够处理在运行时从数据库中提取动态内容.我遇到麻烦的地方是了解如何使用节点精确渲染动态页面.html页面是一个静态页面.你不能真正渲染一个php或一个asp页面,因为它确实没有意义吗?

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

Mic*_*hip 7

如果你添加...

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
Run Code Online (Sandbox Code Playgroud)

...在app = express()完成后,如果不使用扩展,它现在将默认为Jade渲染引擎.然后在你的路由器:

app.get('/', function(req,res){
  res.render('home', {
    var1: 'val1',
    var2: 'val2'
  });
});
Run Code Online (Sandbox Code Playgroud)

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

    "jade": "~1.9.1",
Run Code Online (Sandbox Code Playgroud)

...然后在你的文件夹中"npm install"将其带入.

然后你需要一个名为/views/home.jade的文件,内容如下:

doctype html
html
  body
    p Var1 is #{var1}
    p Var2 is #{var2}
Run Code Online (Sandbox Code Playgroud)

您应该看到 - 当您访问主页时 - 这些值已经传递给Jade渲染引擎并分别在模板中作为'val1'和'val2'扩展.


adr*_*dar 5

在您的情况下,页面是静态的。这里就引入了模板引擎(视图引擎),通过这个你可以动态的渲染页面的内容。

我现在记得的一些模板引擎是vash(它就像 MVC 中的 razor 语法,我喜欢它)和jade。还有更多。

注意:您可以在我提供的链接中找到如何将它们与express集成。