использование HTTP.request в рендеринге ejs - PullRequest
0 голосов
/ 13 июня 2018

пример в Express У меня есть маршрут, связанный с моим промежуточным ПО ejs.Код 1:

app.all("/sample", function(req,res,next){
    ejs.renderFile("./sample.ejs", {req,res,next,require,module:require("module")} {}, function(e, dt){
        res.send(dt.toString());
    });
});

все хорошо в первом коде.и в sample.ejs (второй код) я хочу запросить какой-нибудь текстовый файл в Интернете и вернуться к HTML (и должен использовать HTTP-модуль)Код 2:

<%
    var http=require("http");
    var url=require("url");

    var opt = url.parse("http://website.com/thisfile.txt");
    /* it will return "Hello World!" btw */
    var dt = ""
    var hReq = http.request(opt, function(hRes){
        hRes.on("data", function(chunk){
            dt+=chunk.toString();
        });
    });
    hReq.end();
%>
<h2>Here is the data is <%= dt %></h2>

и пока я пытаюсь в браузере.это просто даст мнеКод 3:

<h2>Here is the data is </h2>

, где я хочу, дал мне Код 4:

<h2>Here is the data is Hello World!</h2>

Как я мог получить это?Я просто хочу использовать модуль HTTP или Net Socket Module.и я просто хочу редактировать код 2. Код 1 постоянно так.

1 Ответ

0 голосов
/ 13 июня 2018

Хотя EJS может выполнять полный JavaScript, вы, как правило, хотите оставить как можно больше из шаблона и поместить больше своей логики в основной обработчик экспресс-запросов.

Поскольку рендеринг выполняется на стороне сервера, в любом случаеничто не изменится, кроме как облегчить чтение и тестирование.

Вы должны рассмотреть вопрос о перемещении HTTP-запроса, сделанного в вашем шаблоне EJS, в ваш обработчик app.all('/sample'), а затем просто вставить результат в ваш шаблон.В этом случае это будет последняя строка, полученная из HTTP-запроса.Затем вы получите что-то вроде этого.(Это непроверенный код).

Кроме того, хотя он вообще не требуется, я бы посоветовал взглянуть на что-то вроде request, это значительно упрощает запросы HTTP!

var request = require('request');

app.all("/sample", function(req,res,next){

  // Make the HTTP request
  request('http://www.website.com/file.txt', function(err, response, body) {

    // Render the ejs template
    ejs.renderFile("./sample.ejs", {file: body}, function(e, dt) {
      // Send the compiled HTML as the response
      res.send(dt.toString());
    });
  });
});
...