Dust.js и шлем - не рендеринг HTML - PullRequest
0 голосов
/ 08 июня 2019

У меня есть шаблон Dust.js, и я хочу использовать его в качестве асинхронного режима (для потоковой передачи), чтобы загрузить мои данные. Это работает очень хорошо, но когда я добавляю use (шлем ()), он больше не отображается как html, как обычный текст

Я пробовал использовать dust.stream, пробовал hoffman, пробовал adaro. ничего не работает, второй шлем введен, он не работает.

Хоффман

    hoffman = require('hoffman'),
    express = require('express'),
    helmet = require('helmet'),
    request = require('request');

var app = express();

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'dust');
app.engine('dust', hoffman.__express());

app.use(helmet());
// This is the important part-- it adds res.stream()
app.use(hoffman.stream);

app.get('/', function (req, res) {
  res.stream("hello", {
    "async": function(chunk, context, bodies, params) {
      return chunk.map(function(chunk) {
        // Introducting an artificial delay to make streaming more apparent
        setTimeout(function() {
          request('http://www.dustjs.com/')
          .on('data', chunk.write.bind(chunk))
          .on('end', chunk.end.bind(chunk));
        }, 3000);
      });
    }
  });
});
const port = process.env.PORT | 3007;

app.listen(port, function () {
  console.log(`Visit http://localhost:${port} to see streaming!`);
});

Dust.stream:

var fs = require('fs'),
    path = require('path'),
    express = require('express'),
    request = require('request'),
    helmet = require('helmet'),
    dust = require('dustjs-linkedin');

dust.config.whitespace = true;
dust.config.cache = false;

// Define a custom `onLoad` function to tell Dust how to load templates
dust.onLoad = function(tmpl, cb) {
  fs.readFile(path.join('./views', path.relative('/', path.resolve('/', tmpl + '.dust'))),
              { encoding: 'utf8' }, cb);
};

var app = express();
app.use(helmet());

app.get('/streaming', function(req, res) {
  dust.stream('hello', {
    "async": request('http://www.dustjs.com/')
  }).pipe(res)
    .on('end', function() {
      console.log('Done streaming!');
    });
});

app.get('/rendering', function(req, res) {
  dust.render('hello', {
    "async": request('http://www.dustjs.com/')
  }, function(err, out) {
    res.send(out);
    console.log('Done rendering!');
  });
});


const port = process.env.PORT | 3002;
app.listen(port, function () {
  console.log(`Visit http://localhost:${port} to see streaming!`);
});

Когда шлем не используется, отображается HTML, при добавлении шлема визуализация не выполняется, и я вижу страницу HTML в виде текста

1 Ответ

0 голосов
/ 10 июня 2019

Хорошо, пыль отлично справляется с асинхронностью.

Бит, который мне не хватало, был:

res.setHeader('Content-Type', 'text/html; charset=utf-8');

и теперь он работает со шлемом!

...