【问题标题】:ExpressJS without Jade - inject data directly to HTML files没有 Jade 的 ExpressJS - 将数据直接注入 HTML 文件
【发布时间】:2012-06-17 12:49:18
【问题描述】:

我正在使用带有普通 HTML 模板的 ExpressJS(没有 Jade 或类似的模板引擎)。由于我即将将 MongoDB 添加到我的应用程序中,因此我需要将数据注入到我的 HTML 文件中。我知道当我使用 Jade 或类似的模板引擎时没有问题。是否可以不使用 Jade 直接将其注入到我的 HTML 文件中?如果没有,是否可以使用 Jade 并仍然拥有我的 HTML 文件?

这是我的 app.js:

var express = require('express');
var server = express.createServer();

server.configure(function () {
  server.use('/bootstrap', express.static(__dirname + '/bootstrap'));
  server.use('/css', express.static(__dirname + '/css'));
  server.use('/js', express.static(__dirname + '/js'));
  server.use(express.static(__dirname + '/html'));
});
server.set('views', __dirname + '/html');
server.register('.html', require('handlebars'));
server.set('view options', { layout: false });
server.use(express.bodyParser());
server.use(express.cookieParser({ secret: "keyboard cat" }));
var memStore = require('connect').session.MemoryStore;
server.use(express.session({ secret: "keyboard cat", store: memStore( {
  reapInterval: 60000 * 10
})}));

server.listen(1337);
console.log('Express server started on port %s', server.address().port);

/** SESSIONS **/
function requiresLogin(req, res, next) {
  if (req.session.user) {
    next();
  }
  else {
    res.redirect('/login'); // TODO: process redirect
  }
}

var pseudoUsers = require('./users');

server.get('/login', function(req, res) {
  res.render('login.html');
});
server.post('/authenticated', function(req, res) {
  pseudoUsers.authenticate(req.body['emailInput'], req.body['passwordInput'], function(user) {
     if (user) {
       req.session.user = user;
       res.redirect('/dashboard');
     }
     else {
       res.redirect('/login?wrongCredentials=true');
     }
  });
});

/* ROUTERS ****************/
/**************************/
server.get('/home', function(req, res) {
  res.render('index.html');
});
[some more routes..]

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    假设您需要注入动态数据(随时间变化并具有其他依赖关系的数据,例如用户名等),您将以一种或另一种方式使用模板。如果您不愿意使用任何预制模板引擎,很可能您最终会创建自己的模板引擎,这很可能不如大多数其他拥有数十亿浏览量的引擎。

    您特别提到您不想使用 Jade。但是您的代码确实引入了另一个模板引擎 (http://handlebarsjs.com/) 的把手,它基本上允许您使用 {{ somevarref }} 将变量与您的 html 模板混合。

    您也可以完全避免使用模板并使用代码动态创建所有 html,但这通常是使用任何模板引擎在后台为您完成的,那么为什么要手动解决所有这些麻烦呢?

    最后,您也可以生成您的 html 客户端,可能使用 DOM 操作来获得所有正确的部分,但根据您的问题,我猜这不适合您的用例,和/或那就是可能有点超出目前的需要。

    【讨论】:

    • 哦,你是对的。我想我需要看看车把。玩过车把后,我会将其标记为答案。
    • 劣质哈哈?不要阻止这个人与众不同,谁知道,他可以创建一个更好或至少不同的模板引擎来解决当前无法完成的其他问题。
    • 给你加1 marius,去看看handlebarsjs
    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2021-12-19
    相关资源
    最近更新 更多